从列表中挑选值 - 如何提高效率[重复]

问题描述 投票:-1回答:6

这个问题在这里已有答案:

我试图从列表中选择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)
python
6个回答
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]

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

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]

0
投票

如果目标只是打印它,你可以使用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

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


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,回答的意图非常相似。

© www.soinside.com 2019 - 2024. All rights reserved.