Python:任何()语句尚未按预期返回真实



我必须检查多个字符串是否在一行中。第一个语句如预期的那样返回true,但是第二个语句返回false,我不知道为什么,也许这是一个非常愚蠢的错误...

lines[-10] = 'Step   0:     3'
lines[-1]  = 'Step   9:    30'

我在做什么:

with open('stdout.txt', 'r') as f:
    lines = f.readlines()
print(inputs)
if set(inputs) == set(['10', '3', '+']):
    if any(x in ['0:', '3'] for x in lines[-10]):
        print('ok')
        test = True
    else:
        print('error')
        test = False

    print(lines[-1])
    #if '30' in lines[-1] and '9:' in lines[-1]: returns true !!!
    if any(x in ['9:', '30'] for x in lines[-1]):
        print('ok')
        test = test & True
    else:
        print('error')
        test = test & False

您可以在样本中看到,如果我自我检查每个值,它都可以。

也许您的意思是:

if any((term in lines[-10]) for term in ['0:', '3']):
# etc
#if '30' in lines[-1] and '9:' in lines[-1]: returns true !!!
if any((term in lines[-10]) for term in ['9:', '30']):

x for x in "somestring"将产生 somestring的每个个体字符:

for x in 'Step   9:    30':
    print("x is '{}'.format(x))

现在显然,由于['9:', '30']是两字符字符串的列表,因此'Step 9: 30'的单个字符都不是其中的元素。

,如其他答案中所述, x for x in 'string'产生的单个字符永远不会与例如'9:'或'30',第一个((都起作用,因为您将x与'3'进行了比较。相反,您可以做:

if any(x in lines[-1] for x in ['9:','30']):
    do_stuff...

如果您在这里提供最低限度的案例,我认为您可以通过自己的自我弄清楚。

In [3]: any(x in ['9:', '30'] for x in line[-1])
Out[3]: False
In [4]: any(x in ['9:', '30'] for x in line)
Out[4]: False
In [5]: line = 'Step   9:    30'
In [6]: any(x in ['9:', '30'] for x in line)
Out[6]: False
In [7]: for x in line:
   ...:     print(x)
   ...:
S
t
e
p

9
:


3
0
In [8]: x = "9"
In [9]: x in ['9:', '30']
Out[9]: False
In [10]: x in '9:3-'
Out[10]: True

因此,对于字符串,如果您迭代它,您将获得char,对于项目列表(例如['9:', '30'](,您将获得项目('9:', '30'(。

您可以在Python控制台中尝试。