如果我有一个选项列表,这些选项正在进行休息,如下所示:
[ 'allX', 'noX', 'noY', 'allY', 'var1', 'var2' ]
(实际列表很长)
只有一个' * X'可以包括在内。 只有一个' * Y'可以包括在内。 任何单项变量(如var1和var2)都可以与任意选项组合一起使用。
基本上我想避免长时间使用if-then语句来检查allX和noX是否一起提供,同样适用于下一对,依此类推。
是否有一个方便的python模块用于执行此操作或什么是断言此要求的最pythonic方式?我无法控制列表本身,因此从这一点解决这个问题不是一种选择。
感谢您的帮助。
答案 0 :(得分:3)
要减少控制语句,您可以尝试:
from itertools import groupby, chain
new_data = list(chain.from_iterable([[list(b)[0]] if a.isupper() else list(b) for a, b in groupby(s, key=lambda x: x[-1])]))
输出:
['allX', 'noY', 'var1', 'var2']
为了使您的算法尽可能通用,您可以尝试:
s = [ 'allX', 'noX', 'noY', 'allY', 'var1', 'var2' ]
import re
last = []
second_last = []
for i in s:
if re.findall("[A-Z]$", i):
if i[-1] not in second_last:
last.append(i)
second_last.append(i[-1])
else:
last.append(i)
print(last)
输出:
['allX', 'noY', 'var1', 'var2']