Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有独占选项的列表_Python_Python 2.7 - Fatal编程技术网

Python 具有独占选项的列表

Python 具有独占选项的列表,python,python-2.7,Python,Python 2.7,如果我有一个向rest看涨期权提供的期权列表,如下所示: [ 'allX', 'noX', 'noY', 'allY', 'var1', 'var2' ] (实际清单相当长) 只能包含“*X”中的一个。 只能包含“*Y”中的一个。 任何单个项变量(如var1和var2)都可以与任何选项组合使用 基本上,我想避免一大堆if-then语句检查allX和noX是否一起提供,下一对也是如此,以此类推 是否有一个方便的python模块来实现这一点,或者什么是断言此需求的最python的方式?我无法控制列

如果我有一个向rest看涨期权提供的期权列表,如下所示:

[ 'allX', 'noX', 'noY', 'allY', 'var1', 'var2' ]
(实际清单相当长)

只能包含“*X”中的一个。 只能包含“*Y”中的一个。 任何单个项变量(如var1和var2)都可以与任何选项组合使用

基本上,我想避免一大堆if-then语句检查allX和noX是否一起提供,下一对也是如此,以此类推

是否有一个方便的python模块来实现这一点,或者什么是断言此需求的最python的方式?我无法控制列表本身,因此从这一方面解决这一问题不是一个选择


感谢您的帮助。

要减少控制语句,您可以尝试以下方法:

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])]))
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']
['allX', 'noY', 'var1', 'var2']
要使算法尽可能通用,您可以尝试以下方法:

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])]))
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']
['allX', 'noY', 'var1', 'var2']

要减少控制语句,可以尝试以下方法:

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])]))
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']
['allX', 'noY', 'var1', 'var2']
要使算法尽可能通用,您可以尝试以下方法:

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])]))
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']
['allX', 'noY', 'var1', 'var2']

您是否尝试过smth-like-len(filter(lambda x:x.endswith(“x”),您的_列表))==1?事情是否以
x
Y
结束,或者这些事情是否可以是任意值?抱歉,列表非常复杂。在看了一遍之后,我认为没有一种巧妙的方法可以做到这一点=(若这些特殊值的结构有任何韵律或原因,可能有办法做到。但若它只是一堆任意值,其中有些东西有特殊含义,而另一些东西并没有,那个么很难处理。你们有并没有尝试过像len这样的smth(filter(lambda x:x.endswith(“x”),你们的列表))==1?事情是否真的以
X
Y
结束,或者这些事情是否可以是任意值?抱歉,这个列表非常多样化和复杂。再次查看后,我认为没有一种巧妙的方法可以做到这一点=(若这些特殊值的结构有任何韵律或原因,可能有办法做到。但若只是一堆任意的值,有些东西有特殊的含义,而有些东西并没有,那个么很难处理。