从列表中选择值-如何使其更有效

时间:2019-02-15 10:42:46

标签: python

我正在尝试从列表中选择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)

6 个答案:

答案 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循环将打印它们。