Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图形成一个列表,该列表的大小根据另一个列表中的元素数确定,并将第一个列表中的元素追加到新列表中_Python - Fatal编程技术网

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的例子没有,所以不清楚是否允许。你是我的英雄你是我的英雄