Python 试图形成一个列表,该列表的大小根据另一个列表中的元素数确定,并将第一个列表中的元素追加到新列表中
我一直在尝试根据此标准形成一个列表,我一直收到下面这行的错误消息:Python 试图形成一个列表,该列表的大小根据另一个列表中的元素数确定,并将第一个列表中的元素追加到新列表中,python,Python,我一直在尝试根据此标准形成一个列表,我一直收到下面这行的错误消息: 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(
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))
TypeError:“float”对象不能解释为整数
程序中导致问题的部分就是上面的那部分,如果我能修复它,我可以将错误应用到其余部分
下面是一个用于填充其他三个元素的示例列表,它有20个元素,我希望我形成的每个列表都从该列表中获取来自不同位置的大约1/3的元素:
for n in range(1,(len(randnum))/3):
我希望这段代码形成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 ]
不能对range()函数使用float 见: (len(randnum))/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]
好的,也许你应该试试随机的
重复
样本输出
X:[7,3,18,15,19,1]
Y:[6,13,17,4,14,5]
Z:[19,2,8,18,13,17]
不重复
样本输出
[(17,13,15,5,16,12),(14,4,18,2,19,6),(10,11,7,3,1,0)]不能对range()函数使用float 见: (len(randnum))/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]
好的,也许你应该试试随机的
重复
样本输出
X:[7,3,18,15,19,1]
Y:[6,13,17,4,14,5]
Z:[19,2,8,18,13,17]
不重复
样本输出
[(17,13,15,5,16,12),(14,4,18,2,19,6),(10,11,7,3,1,0)]你可以在这里使用random,但是你需要确保你不再使用random int,我的方法是将它附加到
used
列表中,并检查该列表是否可以再次使用,至于拆分它们,您有20
,因此您可以使用/
楼层划分和%
帮助您创建两个包含7个项目的列表和一个包含6个项目的列表
from random import shuffle
shuffle(original_list)
list(zip(*[iter(original_list)]*int(len(original_list)/3)))
你可以在这里使用random,但你也需要确保不再使用random int,我的方法是将它附加到
used
列表中,并检查该列表是否可以再次使用,至于拆分它们,您有20
,因此您可以使用/
楼层划分和%
帮助您创建两个包含7个项目的列表和一个包含6个项目的列表
from random import shuffle
shuffle(original_list)
list(zip(*[iter(original_list)]*int(len(original_list)/3)))
如果我遵循您的目标,一个简单的方法是洗牌列表的副本,然后从0、1、2开始每3个元素:
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]
这给了我,例如
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]]
如果您坚持使用单独的命名变量
(您也可以简单地执行
tmp_data=random.sample(data,len(data))
来获得列表的随机排列,但由于某些原因,我发现这不如洗牌清晰。不知道为什么。)如果我遵循您的目标,一个简单的方法是洗牌列表的副本,然后从0开始,每3个元素取1,然后2:
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]
这给了我,例如
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]]
如果您坚持使用单独的命名变量
(您也可以简单地执行
tmp_data=random.sample(data,len(data))
来获得列表的随机排列,但由于某些原因,我发现这不如随机排列清晰。不知道为什么。)我们可以看到列表和所需的输出吗?可以将范围参数转换为int:int((len(randnum))/3)
根据您的问题,您希望列表a具有与列表B相同的长度和元素。为什么不写a=B呢?我们可以看到列表和所需的输出吗?将范围参数转换为int的可能副本:int((len(randnum))/3)
根据您的问题,您希望列表a,要使列表B具有相同的长度和元素,为什么不写a=B呢?那么解决方案是什么呢?如果从原始列表中分别采样三次,有时在多个输出中会得到相同的值(例如,18次)。OP的示例没有任何内容,因此不清楚是否允许。那么解决方案是什么?如果从原始列表中分别采样三次,有时在多个输出中会得到相同的值(例如,18次)。OP的例子没有,所以不清楚是否允许。你是我的英雄你是我的英雄