我已经知道如果我们有两个元组的列表,如:
list = (('2', '23', '29', '26'), ('36', '0'))
通过以下命令:
new_list = list[0] + list[1]
它会是;
list = ('2', '23', '29', '26', '36', '0')
如果下面有很多元组,我该怎么办?我想使用循环命令之类的东西?
list = [[list], [list2], [list3], ...]
我想:
new_list = [list1, list2, list3,...]
答案 0 :(得分:3)
使用itertools.chain
,您只需使用*
将列表作为参数提供,即可展开它们。
>>> from itertools import chain
>>> a_list = [[1], [2], [3]]
>>> list(chain(*a_list))
[1, 2, 3]
>>> tuple(chain(*a_list))
(1, 2, 3)
也不要使用list
这样的预定义类型作为变量名,因为这会将它们重新定义为不是它们的真实含义,并且括号(1, 2...)
语法会产生{{1} },而不是tuple
。
答案 1 :(得分:1)
>>> main_list = [[1,2,3],[4,5,6,7],[8,9]]
>>> [item for sublist in main_list for item in sublist]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
这使用嵌套列表理解方法。可以找到关于如何阅读它们的一个很好的解释here。
考虑如何使用常规循环来完成它。一个外部循环将提取列表,内部循环将列表的每个元素附加到结果。
>>> newlist = []
>>> for sublist in main_list:
for item in sublist:
newlist.append(item)
>>> newlist
[1, 2, 3, 4, 5, 6, 7, 8, 9]
同样,在上面的嵌套列表推导中 - for sublist in main_list
提取子列表,每个项目上的for item in sublist
循环和理解开头的item
自动list.append(item)
1}}到最终结果。与常规循环的最大区别在于,您希望自动将附加到最终结果的内容放在开头。
答案 2 :(得分:1)
首先,你没有像你在问题中所说的那样合并两个列表。 您正在做的是将列表列入列表。
有很多方法可以做到这一点。除了其他答案中列出的方法之外,一种可能的解决方案可能是:
for i in range(0, len(list_of_list)):
item = list_of_list[i]
for j in range(0,len(item)):
new_list = new_list + [item]
注意:此解决方案通常标记为 C - 类似,因为它不使用任何Python方法。
答案 3 :(得分:0)
使用 sum()
,
>>> tp = ( ('2', '23', '29', '26'), ('36', '0'), ('4', '2') )
>>> newtp = sum(tp, () )
>>> newtp
('2', '23', '29', '26', '36', '0', '4', '2')
或 itertools
,
>>> from itertools import chain
>>> tp = ( ('2', '23', '29', '26'), ('36', '0'), ('4', '2') )
>>> newtp = tuple( chain(*tp) )
>>> newtp
('2', '23', '29', '26', '36', '0', '4', '2')
或理解,
>>> tp = ( ('2', '23', '29', '26'), ('36', '0'), ('4', '2') )
>>> newtp = tuple(i for subtp in tp for i in subtp)
>>> newtp
('2', '23', '29', '26', '36', '0', '4', '2')
答案 4 :(得分:0)
一种简单的方法是使用reduce
内置方法。
>>> list_vals = (('2', '23', '29', '26'), ('36', '0'))
>>> reduce(lambda x, y: x + y, list_vals)
('2', '23', '29', '26', '36', '0')
答案 5 :(得分:0)
在这种情况下,列表的所有条目都是整数,因此使用regular expressions
很容易。在这里使用正则表达式的另一个好处是,它将适用于任何嵌套列表,而不适用于列表为more than 1 degree nested
时不起作用的链。
import re
alist = [[1], [2],[3]]
results = [int(i) for i in re.findall('\d+', (str(alist)))]
print(results)
输出为;
>>> [1,2,4]
因此,如果给我们一个ugly
任意嵌套的列表,例如:
a_list = [[1], [2], [3], [1,2,3[2,4,4], [0]], [8,3]]
我们可以做到;
a_list = [[1], [2], [3], [1,2,3, [2,4,4], [0]], [8,3]]
results = [int(i) for i in re.findall('\d+', (str(a_list)))]
print(results)
输出是;
>>> [1, 2, 3, 1, 2, 3, 2, 4, 4, 0, 8, 3]
可以说哪个更有帮助。