for n in range(1,(len(randnum))/3):
X.append(randnum(n))
for i in range((len(randnum))/3 , (2/3)*len(randnum)):
Y.append(randnum(i))
for r in range ((2/3)*len(randnum) , len(randnum)):
Z.append(randnum(r))
我一直试图根据此标准形成一个列表,并且我在下面的此行中不断收到此错误消息:
for n in range(1,(len(randnum))/3):
TypeError:“ float”对象无法解释为整数
导致该问题的程序部分是上面的那部分,如果我可以解决的话,我可以改掉错误并将其应用于其余部分。
这是一个示例列表,用于填充其他三个具有20个元素的列表,我希望我形成的每个列表都从该列表中提取大约1/3的不同位置的元素:
[ 59.18013391 12159.7881626 26308.21887981 8357.05103068
20718.85232457 16333.1546026 9828.75690047 10273.65018539
5949.58907673 8767.68292925 31826.29595355 13749.12915211
25423.61181129 28799.50849876 9517.54482827 27275.19296144
12460.2541769 25883.7888204 10393.9452616 26008.572598 ]
我希望这段代码形成3个包含例如的新列表
X = [59.18013391 12159.7881626 26308.21887981 8357.05103068
20718.85232457 16333.1546026]
Y = [9828.75690047 10273.65018539
5949.58907673 8767.68292925 31826.29595355 13749.12915211 ]
Z = [ 25423.61181129 28799.50849876 9517.54482827 27275.19296144
12460.2541769 25883.7888204 10393.9452616 26008.572598]
答案 0 :(得分:2)
您不能将float用于range()函数。
请参阅:https://docs.python.org/3/library/stdtypes.html#range
(len(randnum))/ 3
那是漂浮的!
可能的解决方法:
int((len(randnum))/3)
好的,也许您应该尝试随机
import random
original_list =[ i for i in range(20)]
X = random.sample(original_list, int(len(original_list)/3))
Y = random.sample(original_list, int(len(original_list)/3))
Z = random.sample(original_list, int(len(original_list)/3))
X:[7、3、18、15、19、1]
Y:[6、13、17、4、14、5]
Z:[19、2、8、18、13、17]
from random import shuffle
shuffle(original_list)
list(zip(*[iter(original_list)]*int(len(original_list)/3)))
[(17,13,15,5,16,12),(14,4,18,2,19,6),(10,11,7,7,3,1,0)]
答案 1 :(得分:1)
如果我遵循您的目标,则一种简单的方法是将列表的副本随机排列,然后从0开始依次是每个第3个元素,然后是1,然后是2:
tmp_data = data.copy()
random.shuffle(tmp_data)
new_lists = [tmp_data[i::3] for i in range(3)]
这给了我例如
In [361]: new_lists
Out[361]:
[[13749.12915211,
26008.572598,
25423.61181129,
8767.68292925,
12460.2541769,
26308.21887981,
59.18013391],
[9828.75690047,
20718.85232457,
10273.65018539,
9517.54482827,
27275.19296144,
8357.05103068,
5949.58907673],
[28799.50849876,
12159.7881626,
25883.7888204,
16333.1546026,
10393.9452616,
31826.29595355]]
然后您可以做
X, Y, Z = new_lists
如果您坚持使用单独的命名变量。
(您也可以简单地执行tmp_data = random.sample(data, len(data))
来获得列表的随机排列,但是由于某些原因,我发现这比混洗还不清楚。不确定为什么。)
答案 2 :(得分:0)
您可以在此处使用random,但是还需要确保不再使用该random int,我的方法是将其附加到used
列表中,并检查该列表是否可以再次使用,只要将它们拆分成20
,就可以使用//
地板划分和%
帮助您创建两个包含7个项目的列表和6个项目之一。
import random
data = [
59.18013391,12159.7881626,26308.21887981, 8357.05103068,
20718.85232457,16333.1546026,9828.75690047, 10273.65018539,
5949.58907673, 8767.68292925, 31826.29595355, 13749.12915211,
25423.61181129, 28799.50849876, 9517.54482827, 27275.19296144,
12460.2541769, 25883.7888204, 10393.9452616, 26008.572598
]
y = len(data)//3
z = int((len(data) % 3)/2)
used = []
l1 = []
l2 = []
l3 = []
for i in range(y):
x = random.randint(0, len(data)-1)
while x in used:
x = random.randint(0, len(data)-1)
used.append(x)
l1.append(data[x])
for i in range(y+z):
x = random.randint(0, len(data)-1)
while x in used:
x = random.randint(0, len(data)-1)
used.append(x)
l2.append(data[x])
for i in range(y+z):
x = random.randint(0, len(data)-1)
while x in used:
x = random.randint(0, len(data)-1)
used.append(x)
l3.append(data[x])
chrx@chrx:~/python/stackoverflow/9.23$ python3.7 loop.py l1: [8357.05103068, 10273.65018539, 26008.572598, 5949.58907673, 28799.50849876, 8767.68292925] l2: [25423.61181129, 13749.12915211, 26308.21887981, 9828.75690047, 59.18013391, 16333.1546026, 27275.19296144] l3: [12460.2541769, 12159.7881626, 9517.54482827, 10393.9452616, 25883.7888204, 31826.29595355, 20718.85232457]