我正在尝试从列表中选择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)
答案 0 :(得分:1)
您不能在速度方面优化变量分配,但可以在可读性方面进行优化:
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]
答案 1 :(得分:0)
如果目标是仅打印它,则可以使用slicing
:
start_index = -8
print(input_data[start_index:])
OR
如果要分配它们,则可以使用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])
输出:
[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)
输出:
17 18 19 20 21 22 23 24
答案 2 :(得分:0)
假定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
答案 3 :(得分:0)
在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]
答案 4 :(得分:0)
这提高了一些可读性:
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,回答的意图很相似。
答案 5 :(得分:0)
您可以这样做:
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循环将打印它们。