Python 如何存储在不同的列表中?
我有两个清单如下Python 如何存储在不同的列表中?,python,list,slice,Python,List,Slice,我有两个清单如下 l1 = [2,4,3] l2 = [4,5,6,7,8,9,10,11,12] 我想从l2中列出三个列表,如[4,5],[6,7,8,9]和[10,11,12]。我可以用不同的方法来做,但我需要使用循环 我已经尝试了以下方法: a = [] b = [] c = [] a.append(l2[0:2]) b.append(l2[2:4+2]) c.append(l2[4+2:]) 我希望使用循环,其中l1的元素将是每个新列表的大小。对于以下代码,结果列表存储在“resu
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
我想从l2
中列出三个列表,如[4,5]
,[6,7,8,9]
和[10,11,12]
。我可以用不同的方法来做,但我需要使用循环
我已经尝试了以下方法:
a = []
b = []
c = []
a.append(l2[0:2])
b.append(l2[2:4+2])
c.append(l2[4+2:])
我希望使用循环,其中
l1
的元素将是每个新列表的大小。对于以下代码,结果列表存储在“result”列表中
变量“counter”用于指示起始索引,“x”是l1中的每个元素,因此l2[counter:counter+x]可以获得所需的列表。这可能不是最短的代码,但我想它是明确和简洁的。希望有帮助
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
result = []
counter = 0
for x in l1:
result += [l2[counter:counter+x]]
counter += x
print(result)
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
对于以下代码,结果列表存储在“结果”列表中 变量“counter”用于指示起始索引,“x”是l1中的每个元素,因此l2[counter:counter+x]可以获得所需的列表。这可能不是最短的代码,但我想它是明确和简洁的。希望有帮助
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
result = []
counter = 0
for x in l1:
result += [l2[counter:counter+x]]
counter += x
print(result)
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
您可以这样做:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
l2_ = l2.copy()
result = []
for item in l1:
result.append(l2_[:item])
del l2_[:item]
a,b,c = result
print (a)
print (b)
print (c)
输出:
[4, 5]
[6, 7, 8, 9]
[10, 11, 12]
您可以这样做:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
l2_ = l2.copy()
result = []
for item in l1:
result.append(l2_[:item])
del l2_[:item]
a,b,c = result
print (a)
print (b)
print (c)
输出:
[4, 5]
[6, 7, 8, 9]
[10, 11, 12]
使用列表压缩和
list.pop
Ex:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
print([[l2.pop(0) for _ in range(i)] for i in l1])
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
输出:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
print([[l2.pop(0) for _ in range(i)] for i in l1])
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
使用列表压缩和
list.pop
Ex:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
print([[l2.pop(0) for _ in range(i)] for i in l1])
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
输出:
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
print([[l2.pop(0) for _ in range(i)] for i in l1])
[[4, 5], [6, 7, 8, 9], [10, 11, 12]]
您可以将
l2
转换为collections.deque
以允许使用popleft()
从左侧弹出O(1)
您可以将
l2
转换为collections.deque
以允许使用popleft()
从左侧弹出O(1)
带islice的列表理解
from itertools import islice
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
il2 = iter(l2)
l = [list(islice(il2, x)) for x in l1]
print(l)
# [[4, 5], [6, 7, 8, 9], [10, 11, 12]]
性能
在Jupyter笔记本的数据集l1、l2上使用timeit测试这里发布的五种方法,并预装库。
博丰赞邮报的方法最快
Method 1. pok fung chan -- 100000 loops, best of 3: 2.17 µs per loop
Method 2: ncica -- 100000 loops, best of 3: 2.93 µs per loop
Method 3: darrylg -- 100000 loops, best of 3: 4.02 µs per loop
Method 4: RoadRunner -- 100000 loops, best of 3: 6.38 µs per loop
Method 5: Rakeesh -- 100000 loops, best of 3: 8.76 µs per loop
带islice的列表理解
from itertools import islice
l1 = [2,4,3]
l2 = [4,5,6,7,8,9,10,11,12]
il2 = iter(l2)
l = [list(islice(il2, x)) for x in l1]
print(l)
# [[4, 5], [6, 7, 8, 9], [10, 11, 12]]
性能
在Jupyter笔记本的数据集l1、l2上使用timeit测试这里发布的五种方法,并预装库。
博丰赞邮报的方法最快
Method 1. pok fung chan -- 100000 loops, best of 3: 2.17 µs per loop
Method 2: ncica -- 100000 loops, best of 3: 2.93 µs per loop
Method 3: darrylg -- 100000 loops, best of 3: 4.02 µs per loop
Method 4: RoadRunner -- 100000 loops, best of 3: 6.38 µs per loop
Method 5: Rakeesh -- 100000 loops, best of 3: 8.76 µs per loop