How to merge two lists python
我已经知道,如果我们有两个元组的列表,比如:
1 | list = (('2', '23', '29', '26'), ('36', '0')) |
通过以下命令:
1 | new_list = list[0] + list[1] |
它将是;
1 | list = ('2', '23', '29', '26', '36', '0') |
如果下面有很多元组,我想使用类似于loop的命令,我该怎么做?
1 | list = [[list], [list2], [list3], ...] |
我想要:
1 | new_list = [list1, list2, list3,...] |
使用
1 2 3 4 5 6 | >>> from itertools import chain >>> a_list = [[1], [2], [3]] >>> list(chain(*a_list)) [1, 2, 3] >>> tuple(chain(*a_list)) (1, 2, 3) |
也不要使用诸如
首先,您没有像您在问题中所说的那样合并两个列表。你要做的就是把一张单子列成一张单子。
有很多方法可以做到这一点。除了其他答案中列出的方法外,一种可能的解决方案是:
1 2 3 4 | 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方法。
1 2 3 | >>> 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] |
这将使用嵌套的列表理解方法。这里可以找到如何阅读它们的很好的解释。
想想你怎么用常规的循环。一个外部循环将提取一个列表,一个内部循环将列表中的每个元素附加到结果中。
1 2 3 4 5 6 7 | >>> newlist = [] >>> for sublist in main_list: for item in sublist: newlist.append(item) >>> newlist [1, 2, 3, 4, 5, 6, 7, 8, 9] |
同样,在上面的嵌套列表理解中,
在这种情况下,列表中的所有条目都是整数,因此很容易使用
1 2 3 4 | import re alist = [[1], [2],[3]] results = [int(i) for i in re.findall('\d+', (str(alist)))] print(results) |
输出为;
1 | >>> [1,2,4] |
因此,如果我们得到一个
1 | a_list = [[1], [2], [3], [1,2,3[2,4,4], [0]], [8,3]] |
我们可以做到;
1 2 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 | >>> [1, 2, 3, 1, 2, 3, 2, 4, 4, 0, 8, 3] |
这可以说更有帮助。
一个简单的方法是使用
1 2 3 | >>> list_vals = (('2', '23', '29', '26'), ('36', '0')) >>> reduce(lambda x, y: x + y, list_vals) ('2', '23', '29', '26', '36', '0') |
使用
1 2 3 4 | >>> tp = ( ('2', '23', '29', '26'), ('36', '0'), ('4', '2') ) >>> newtp = sum(tp, () ) >>> newtp ('2', '23', '29', '26', '36', '0', '4', '2') |
或
1 2 3 4 5 | >>> 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') |
或者理解,
1 2 3 4 | >>> 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') |