列出独家选项

时间:2017-09-08 17:17:34

标签: python python-2.7

如果我有一个选项列表,这些选项正在进行休息,如下所示:

[ 'allX', 'noX', 'noY', 'allY', 'var1', 'var2' ]

(实际列表很长)

只有一个' * X'可以包括在内。 只有一个' * Y'可以包括在内。 任何单项变量(如var1和var2)都可以与任意选项组合一起使用。

基本上我想避免长时间使用if-then语句来检查allX和noX是否一起提供,同样适用于下一对,依此类推。

是否有一个方便的python模块用于执行此操作或什么是断言此要求的最pythonic方式?我无法控制列表本身,因此从这一点解决这个问题不是一种选择。

感谢您的帮助。

1 个答案:

答案 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']