我目前有
seq1 = "--MFA"
seq2= "--MFU"
for i in range(0, len(seq1)):
if seq1[i] or seq2[i] == '-':
print "hi"
else:
print "bye"
为什么它打印“hi”5次(即使seq1 [i]和seq1 [i]是M,F,A / U)。我一开始认为这是一个正则表达式问题,但即使逃避连字符也会产生相同的结果。
答案 0 :(得分:3)
if seq1[i] or seq2[i] == '-':
意思是:
if (seq1[i]) or (seq2[i] == '-'):
如果seq[i]
的值为True
(即,如果bool(seq1[i]) == True
),则条件语句将立即为真,因为or
。使用or
运算符,如果一边是True
,则条件运行。
请注意,bool(seq1[i])
始终为True ,因为任何长度的字符串都被视为True。
因此,'hi'
被打印出来。
答案 1 :(得分:2)
if seq1[i] or seq2[i] == '-':
此条件表示如果seq1[i]
为真或seq2[i] = '-'
执行以下操作。在那种情况下,seq1 [i]为5次。然后,它打印'hi'5次。
答案 2 :(得分:1)
您可以在这里使用多种替代方案
if '-' in (seq1[i], seq2[i]):
简洁,但读起来很有趣。
if seq1[i] == '-' or seq2[i] == '-':
感觉更自然
将序列循环在一起的更简洁方法是使用zip
for i, j in zip(seq1, seq2):
if i == '-' or j == '-':
print "hi"
else:
print "bye"
如果您将更多序列循环在一起,扩展比较的一个好方法是使用any
for item in zip(seq1, seq2, seq3, seq4, ...):
if any(i == '-' for i in item):
print "hi"
else:
print "bye"