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'

是否有一种类似python的方法来连接列表列表,而不包括所选的索引?例如,如果我有

[['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:],[])