【发布时间】:2020-06-24 19:10:28
【问题描述】:
我有一个这样的列表:
my_lst = [[1,2,3,4]]
我想知道如何从列表中删除 [] 以获得以下列表:
my_lst = [1,2,3,4]
【问题讨论】:
-
@Sociopath:它可能在
dict中,从技术上讲,它是现代 Python 中的合法类型注释,但是是的,就其本身而言,它不太可能是任何人真正想要的。
我有一个这样的列表:
my_lst = [[1,2,3,4]]
我想知道如何从列表中删除 [] 以获得以下列表:
my_lst = [1,2,3,4]
【问题讨论】:
dict 中,从技术上讲,它是现代 Python 中的合法类型注释,但是是的,就其本身而言,它不太可能是任何人真正想要的。
你有一个列表。
my_lst = my_lst[0] #get the first list of the list
【讨论】:
my_lst = my_lst[0]
你有一个包含一个元素的列表,它本身就是一个列表。您希望变量只是第一个元素,即列表 1、2、3、4。
【讨论】:
双重[[]] 是因为您有一个包含list 的list。要取出内部的list,只需对其进行索引:
my_lst = my_lst[0]
或解压:
[my_lst] = my_lst
拆包有一个温和的优势,如果外部list 不包含一个值(而my_lst[0] 会默默地丢弃任何额外的值),它会给您一个错误。
【讨论】:
如果外部列表的长度可能超过一,您可以使用itertools 来实现此目的,而无需编写显式循环。
In [47]: import itertools
In [49]: list(itertools.chain.from_iterable([[1, 2, 3], [1, 2]]))
Out[49]: [1, 2, 3, 1, 2]
【讨论】:
您可以使用sum 减少一维。
my_lst=sum(my_lst,[])
# [1,2,3,4]
【讨论】:
list 情况,它恰好很好(如果有点奇怪),但是当涉及到 lists 的迭代的广义展平时,它是一个 Schlemiel the Painter's algorithm,具有二次运行时(其中 listifying the itertools.chain/itertools.chain.from_iterable 生成的迭代器是该情况的正确解决方案,具有线性运行时间)。