我必须检查一行中是否有多个字符串。第一个任何语句按预期返回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
正如您在示例中所看到的,如果我自己检查每个值,它就可以工作。
答案 0 :(得分:2)
也许你的意思是:
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']):
答案 1 :(得分:2)
x for x in "somestring"
会产生somestring
的每个个人字符:
for x in 'Step 9: 30':
print("x is '{}'.format(x))
现在显然,由于['9:', '30']
是两个字符的字符串列表,'Step 9: 30'
的单个字符都不是它的元素。
答案 2 :(得分:1)
正如其他答案中所解释的那样x for x in 'string'
会产生个别字符,这些字符永远不会与例如' 9:'或者' 30',第一个any()有效,因为您将x
与' 3'进行比较。相反,你可以这样做:
if any(x in lines[-1] for x in ['9:','30']):
do_stuff...
答案 3 :(得分:0)
如果你在这里提供最低限度的案例,我想你可以自己弄清楚。
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控制台中试用它。