这个问题在这里已有答案:
我试图从列表中选择8个值并将它们分配给变量。如何简化它,使其更有效率。
我还不够具体。我想从列表的开头选择8个值,进行操作,将其添加到结果中,然后从列表中选择下一个8号码,依此类推,直到列表末尾
input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
index=0
for n in range(int(len(input_data)/8)):
v1=input_data[n+index]
x1=input_data[n+1+index]
y1=input_data[n+2+index]
z1=input_data[n+3+index]
v2=input_data[n+4+index]
x2=input_data[n+5+index]
y2=input_data[n+6+index]
z2=input_data[n+7+index]
index+=7
print(v1,x1,y1,z1,v2,x2,y2,z2)
您无法在速度方面优化变量赋值,但您可以在可读性方面:
input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
for n in range(len(input_data)//8):
v1, x1, y1, z1, v2, x2, y2, z2 = input_data[n*8:(n+1)*8]
假设input_data
的固定长度:
for i in range(3):
v1,x1,y1,z1,v2,x2,y2,z2 = input_data[i*8:(i+1)*8]
print(v1,x1,y1,z1,v2,x2,y2,z2)
或input_data
的无限长度(但是8的倍数):
for i in range(0,len(input_data), 8):
v1,x1,y1,z1,v2,x2,y2,z2 = input_data[i:i+8]
print(v1,x1,y1,z1,v2,x2,y2,z2)
所有打印都与OP相同
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
在python中我们可以做到这一点
input_data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
temp=input_data
randomly_picked=[]
for i in range(len(input_data)):
v1,v2,v3,v4,v5,v6,v7,v8 = input_data[i:i+8]
如果目标只是打印它,你可以使用slicing
:
start_index = -8
print(input_data[start_index:])
要么
如果要分配它们,可以使用list
存储以后可以分离提取的值。
vars_list = []
for i in range(start_index, 0):
vars_list.append(input_data[i])
print(vars_list[0])
print(vars_list[1])
print(vars_list[2])
print(vars_list[3])
print(vars_list[4])
print(vars_list[5])
print(vars_list[6])
print(vars_list[7])
OUTPUT:
[17, 18, 19, 20, 21, 22, 23, 24]
17
18
19
20
21
22
23
24
编辑:
更容易,单线杀手:
start_index = -8
for i in range(len(input_data)//8): v1, x1, y1, z1, v2, x2, y2, z2 = input_data[start_index:]
print(v1, x1, y1, z1, v2, x2, y2, z2)
OUTPUT:
17 18 19 20 21 22 23 24
你可以这样做:
from random import sample
list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
values = sample(list, 8)
for x in values:
print(x)
这将从列表中随机选择八个数字,for循环将打印它们。
这提高了可读性:
input_data = range(1,25)
data = iter(input_data)
for v1, x1, y1, z1, v2, x2, y2, z2 in zip(*[data]*8):
print(v1, x1, y1, z1, v2, x2, y2, z2)
打印:
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
我问了一个question,回答的意图非常相似。