循环 - 如果多个条件中的一个为True,则附加到新列表

时间:2016-04-26 11:06:28

标签: python loops append

我正在写一些代码:

for b in result:
    #if re.match('[V]\W\d\W\D+\.*\D+\W\d+\W+', b) not in str(b):
    if 'FillLevel[' not in str(b):
        new_list.append(b)
    #elif 'CycleMAX[' not in str(b):
    #    new_list.append(b)
    #elif 'CycleMIN[' not in str(b):
    #    new_list.append(b)
    #elif 'CycleAvg[' not in str(b):
    #    new_list.append(b)

他们的工作只有在我有一个条件(如果)时。 如何更改此代码以适应几个条件? result是一个数组,例如result[5] == ['V', '4', 'FillLevel[64]', "S7:[CPUA]DB1610', 'INT126", '2', 'CPUA.DB1610.126,I;RW', 'RW', '0', "0']"]

2 个答案:

答案 0 :(得分:1)

也许是这样的:

for b in result:
    for entry in ['FillLevel[', 'CycleMAX[', ...]:
        if entry not in str(b):
            new_list.append(b)

或者,如果@ TigerhawkT3评论过,那么更短,更pythonic和不可读的方式将是:

for b in result:
    if any(item not in str(b) for item in ('FillLevel[', 'CycleMAX[', ...)): 
        new_list.append(b)

希望这有帮助!

答案 1 :(得分:0)

你真的打算做什么?您的示例代码将仅过滤掉包含所有单词'FillLevel [','CycleMAX [','CycleMIN ['等)的列表。因此,只有这样的列表才会被删除:['V', '4', 'FillLevel[64]', 'CycleMAX[', 'CycleMIN[', ...]

如果你想要的话,TigerhawkT3的代码可以正常工作。

对于linusg的第一个示例,您必须在break行之后添加new_list.append(b),否则会多次附加相同的列表。

您是否打算删除包含这些单词的所有列表?然后尝试这样的事情(类似于其他答案):

words = ('FillLevel[', 'CycleMAX[', 'CycleMIN[')  # etc.

for b in results:
    if not any(word in str(b) for word in words):
        new_list.append(b)

或者:

for b in results:
    for word in words:
       if word in str(b):
           break
    else:  # This else clause is executed only if no break occurs.
        new_list.append(b)

或者作为列表理解:

new_list = [b for b in results if not any(word in str(b) for word in words)]