Python 连接不包含一个索引的列表列表
是否有一种类似python的方法来连接列表列表,而不包括所选的索引?例如,如果我有Python 连接不包含一个索引的列表列表,python,list-comprehension,Python,List Comprehension,是否有一种类似python的方法来连接列表列表,而不包括所选的索引?例如,如果我有 [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']] 并且不希望结果中出现索引1,我的串联列表如下所示: ['a', 'd', 'e', 'f', 'g'] 我可以通过一个循环并根据我选择的索引检查迭代来实现这一点,但我希望有一种更干净的方法。您可以使用切片: from itertools import chain ls = [['a'], ['b', 'c'], ['d'
[['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']]
并且不希望结果中出现索引1,我的串联列表如下所示:
['a', 'd', 'e', 'f', 'g']
我可以通过一个循环并根据我选择的索引检查迭代来实现这一点,但我希望有一种更干净的方法。您可以使用切片:
from itertools import chain
ls = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']]
list(chain.from_iterable(ls[:1] + ls[2:]))
如果您想避免将切片添加到一起并创建新列表的成本,那么它会变得更加复杂:
from itertools import chain, islice
list(chain.from_iterable(chain(islice(ls, 1), islice(ls, 2, None))))
这里有一个方法:
lists = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']]
subset = [x for ind, x in enumerate(lists) if ind != 1]
subset # [['a'], ['d'], ['e', 'f', 'g']]
flattened = [item for l in subset for item in l]
flattened # ['a', 'd', 'e', 'f', 'g']
您可以将这些内容组合成一个单独的理解,我在这里分两个步骤来更清楚地展示每个部分的作用。如果您不介意使用我可以提供的外部库,请从1开始:
我是那个图书馆的作者 这是~“我可以通过循环来完成,并根据我选择的索引检查迭代……” 但在列表理解中,没有LIB
nix = 1
myls = [['a'], ['b', 'c'], ['d'], ['e', 'f', 'g']]
[e for ls in myls for e in ls if ls != myls[nix]]
Out[11]: ['a', 'd', 'e', 'f', 'g']
也不需要枚举
另一个切片和展平的可能性,读起来不错
sum(myls[:nix] + myls[nix+1:],[])
但是有些人在使用sum时会遇到问题如果要使用itertools,也可以使用
islice
来避免临时列表创建。我使用最新版本的Python,它不会在那里创建列表。但是ls[:1]
和ls[2://code>都会创建新列表。没关系,对于这样一个问题,不管怎么说,都是过火了:)@MSeifert啊,我错了,你是对的。即使在Python3中,它也会创建新的列表。可能有点过分了,但我还是要提一提。
sum(myls[:nix] + myls[nix+1:],[])