问题描述
我有三个包含元素的列表:
a = [[0,1],[2,3],...]b = [[5,6],[7,8],...]c = []
我想将 a 和 b 中的元素附加到 c 中以获得:
c = [ [0,1],[5,6],[2,3],[7,8],.... ]
另一种使用字符串切片(以及最高效)的非常简单的方法:
>>>a = [[0,1],[2,3]]>>>b = [[5,6],[7,8]]>>>c = a + b # 创建一个大小为 len(a) + len(b) 的列表>>>c[::2], c[1::2] = a, b # 交替插入值>>>C[[0, 1], [5, 6], [2, 3], [7, 8]]以下是此处提到的答案与 timeit
的结果比较(Python 版本:2.7):
使用字符串切片:每个循环 0.586 usec
moin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]];""c = a + b; c[::2], c[1::2] = a, b"1000000 个循环,最好的 3 个:每个循环 0.586 微秒
使用
itertools.chain()
:每个循环 1.89 usecmoin@moin-pc:~$ python -m "timeit" -s "from itertools import chain; a = [[0,1],[2,3]]; b = [[5,6],[7,8]];""c = list(chain(*zip(a, b)))"1000000 个循环,最好的 3 个:每个循环 1.89 微秒
使用
reduce()
:每个循环 0.829 usecmoin@moin-pc:~$ python -m "timeit" -s "import operator; a = [[0,1],[2,3]]; b = [[5,6],[7,8]];""c = reduce(operator.concat, zip(a, b))"1000000 个循环,3 个最佳:每个循环 0.829 微秒
使用
list.extend()
:每个循环 0.824 usecmoin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]]; c=[]" "对于 zip(a,b) 中的对:c.extend(pair)"1000000 个循环,最好的 3 个:每个循环 0.824 微秒
使用
list.append()
两次:每个循环 1.04 usecmoin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]]; c=[]" "对于 zip(a, b) 中的 a_element, b_element: c.append(a_element); c.append(b_element)"1000000 个循环,最好的 3 个:每个循环 1.04 微秒
I have three lists with elements :
a = [[0,1],[2,3],...]
b = [[5,6],[7,8],...]
c = []
I want to append elements from a and b into c to get:
c = [ [0,1],[5,6],[2,3],[7,8],.... ]
Another very simple approach using string slicing (and most performance efficient) as:
>>> a = [[0,1],[2,3]]
>>> b = [[5,6],[7,8]]
>>> c = a + b # create a list with size = len(a) + len(b)
>>> c[::2], c[1::2] = a, b # alternately insert the value
>>> c
[[0, 1], [5, 6], [2, 3], [7, 8]]
Below is the comparison of results with timeit
for the answers mentioned here (Python version: 2.7):
Using string slicing: 0.586 usec per loop
moin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]];" "c = a + b; c[::2], c[1::2] = a, b" 1000000 loops, best of 3: 0.586 usec per loop
Using
itertools.chain()
: 1.89 usec per loopmoin@moin-pc:~$ python -m "timeit" -s "from itertools import chain; a = [[0,1],[2,3]]; b = [[5,6],[7,8]];" "c = list(chain(*zip(a, b)))" 1000000 loops, best of 3: 1.89 usec per loop
Using
reduce()
: 0.829 usec per loopmoin@moin-pc:~$ python -m "timeit" -s "import operator; a = [[0,1],[2,3]]; b = [[5,6],[7,8]];" "c = reduce(operator.concat, zip(a, b))" 1000000 loops, best of 3: 0.829 usec per loop
Using
list.extend()
: 0.824 usec per loopmoin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]]; c=[]" "for pair in zip(a,b): c.extend(pair)" 1000000 loops, best of 3: 0.824 usec per loop
Using
list.append()
twice: 1.04 usec per loopmoin@moin-pc:~$ python -m "timeit" -s "a = [[0,1],[2,3]]; b = [[5,6],[7,8]]; c=[]" "for a_element, b_element in zip(a, b): c.append(a_element); c.append(b_element)" 1000000 loops, best of 3: 1.04 usec per loop
这篇关于交替附加来自两个列表的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!