1

我目前有

seq1 = "--MFA"
seq2= "--MFU"

for i in range(0, len(seq1)):

    if seq1[i] or seq2[i] == '-':

        print  "hi"
    else:
        print "bye"

为什么它会打印 5 次“hi”(即使 seq1[i] 和 seq1[i] 是 M、F、A/U)。起初我认为这是一个正则表达式问题,但即使转义连字符也会产生相同的结果。

4

3 回答 3

3

if seq1[i] or seq2[i] == '-':

方法:

if (seq1[i]) or (seq2[i] == '-'):

如果seq[i]有一个值True(即 if bool(seq1[i]) == True),那么条件语句将立即为真,因为or. 使用or运算符,如果一侧是True,则条件运行。

请注意,bool(seq1[i])它将始终为 True,因为任何长度的字符串都被视为 True。

因此,'hi'被打印。

于 2013-11-07T03:02:53.887 回答
2
if seq1[i] or seq2[i] == '-':

此条件表示如果seq1[i]为真或seq2[i] = '-'执行以下操作。在这种情况下,seq1[i] 5 次为真。然后,它打印 'hi' 5 次。

于 2013-11-07T03:01:26.100 回答
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"
于 2013-11-07T03:06:32.650 回答