如何在嵌套列表 Python 中连接两个列表?
How do I concatenate two lists inside nested list Python?
如何在嵌套列表 Python 中连接两个列表?
我有这个列表
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
我的预期输出是
lists_of_lists =[[1,2],[3,5],[6,6]]
我试过这种方法
new = []
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
for i in range(len(lists_of_lists)):
for list in lists_of_lists[i]:
for element in list:
new.append(element)
print(new)
但是我得到了
[1, 2, 3, 5, 6, 6]
感谢您的任何建议
尝试 numpy
:
在:
import numpy as np
lists_of_lists =np.array([[[1],[2]],[[3],[5]],[[6],[6]]])
lists_of_lists.reshape(lists_of_lists.size//2, 2)
输出:
array([[1, 2],
[3, 5],
[6, 6]])
您可以使用 operator.concat()
to group 2 separate lists into one and itertools.starmap()
遍历主列表并解压内部列表:
from operator import concat
from itertools import starmap
result = list(starmap(concat, lists_of_lists))
您也可以使用内置 map()
函数和 lambda
表达式 (但为什么呢?)[ 而无需导入=33=]:
result = list(map(lambda x: x[0] + x[1], lists_of_lists))
你也可以使用chain.from_iterable()
:
from itertools import chain
result = list(map(list, map(chain.from_iterable, lists_of_lists)))
但是如果您想修补您编写的代码以使其按预期工作:
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
new = []
for sub_list in lists_of_lists:
new_item = []
for item in sub_list:
for element in item:
new_item.append(element)
new.append(new_item)
[[i for inner in sub_lists for i in inner] for sub_lists in lists_of_lists]
# [[1, 2], [3, 5], [6, 6]]
你可以试试这个。
[sum(i,[]) for i in lists_of_lists]
[[1, 2], [3, 5], [6, 6]]
一些 timeit
对建议解决方案的分析(python 3.7 和 windows 10)
基准列表=[[[1],[2]],[[3],[5]],[[6],[6]]]
In [48]: timeit [sum(i,[]) for i in lists_of_lists]
914 ns ± 103 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [49]: timeit [[i for inner in sub_lists for i in inner] for sub_lists in lists_of_lists]
1.25 µs ± 136 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [64]: timeit list(starmap(concat, lists_of_lists))
639 ns ± 30 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [70]: timeit list(map(list, map(chain.from_iterable, lists_of_lists)))
1.55 µs ± 57 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
基准列表=l=[[[1],[2]],[[3],[5]],[[6],[6]]]*1000000
(300万)。
In [60]: timeit [sum(i,[]) for i in l]
1.06 s ± 68 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [61]: timeit [[i for i in j] for j in l]
1.13 s ± 64.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [65]: timeit list(starmap(concat, l))
595 ms ± 15.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [71]: timeit list(map(list, map(chain.from_iterable, l)))
1.39 s ± 101 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
result = []
for subList in lists_of_lists:
newList = []
for subSubList in subList:
newList.extend(subSubList)
result.append(newList)
并且result
包含了想要的内容。
我希望这是可读的
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
def concat_inner(arr):
return arr[0]+ arr[1]
final_list = list(map(concat_inner, lists_of_lists))
print(final_list)
你彻底走向低级了。只需降低一层深度并将列表展平。
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
for i in lists_of_lists:
flat_list = [item for sublist in i for item in sublist]
new.append(flat_list)
print(new)
如何在嵌套列表 Python 中连接两个列表?
我有这个列表
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
我的预期输出是
lists_of_lists =[[1,2],[3,5],[6,6]]
我试过这种方法
new = []
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
for i in range(len(lists_of_lists)):
for list in lists_of_lists[i]:
for element in list:
new.append(element)
print(new)
但是我得到了
[1, 2, 3, 5, 6, 6]
感谢您的任何建议
尝试 numpy
:
在:
import numpy as np
lists_of_lists =np.array([[[1],[2]],[[3],[5]],[[6],[6]]])
lists_of_lists.reshape(lists_of_lists.size//2, 2)
输出:
array([[1, 2],
[3, 5],
[6, 6]])
您可以使用 operator.concat()
to group 2 separate lists into one and itertools.starmap()
遍历主列表并解压内部列表:
from operator import concat
from itertools import starmap
result = list(starmap(concat, lists_of_lists))
您也可以使用内置 map()
函数和 lambda
表达式 (但为什么呢?)[ 而无需导入=33=]:
result = list(map(lambda x: x[0] + x[1], lists_of_lists))
你也可以使用chain.from_iterable()
:
from itertools import chain
result = list(map(list, map(chain.from_iterable, lists_of_lists)))
但是如果您想修补您编写的代码以使其按预期工作:
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
new = []
for sub_list in lists_of_lists:
new_item = []
for item in sub_list:
for element in item:
new_item.append(element)
new.append(new_item)
[[i for inner in sub_lists for i in inner] for sub_lists in lists_of_lists]
# [[1, 2], [3, 5], [6, 6]]
你可以试试这个。
[sum(i,[]) for i in lists_of_lists]
[[1, 2], [3, 5], [6, 6]]
一些 timeit
对建议解决方案的分析(python 3.7 和 windows 10)
基准列表=[[[1],[2]],[[3],[5]],[[6],[6]]]
In [48]: timeit [sum(i,[]) for i in lists_of_lists]
914 ns ± 103 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [49]: timeit [[i for inner in sub_lists for i in inner] for sub_lists in lists_of_lists]
1.25 µs ± 136 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [64]: timeit list(starmap(concat, lists_of_lists))
639 ns ± 30 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [70]: timeit list(map(list, map(chain.from_iterable, lists_of_lists)))
1.55 µs ± 57 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
基准列表=l=[[[1],[2]],[[3],[5]],[[6],[6]]]*1000000
(300万)。
In [60]: timeit [sum(i,[]) for i in l]
1.06 s ± 68 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [61]: timeit [[i for i in j] for j in l]
1.13 s ± 64.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [65]: timeit list(starmap(concat, l))
595 ms ± 15.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [71]: timeit list(map(list, map(chain.from_iterable, l)))
1.39 s ± 101 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
result = []
for subList in lists_of_lists:
newList = []
for subSubList in subList:
newList.extend(subSubList)
result.append(newList)
并且result
包含了想要的内容。
我希望这是可读的
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
def concat_inner(arr):
return arr[0]+ arr[1]
final_list = list(map(concat_inner, lists_of_lists))
print(final_list)
你彻底走向低级了。只需降低一层深度并将列表展平。
lists_of_lists =[[[1],[2]],[[3],[5]],[[6],[6]]]
for i in lists_of_lists:
flat_list = [item for sublist in i for item in sublist]
new.append(flat_list)
print(new)