我必须检查多个字符串是否在一行中。第一个语句如预期的那样返回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控制台中尝试。