我正在写一些代码:
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']"]
答案 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)]