[英]Split a list in for loop based on indices of list
这是我正在处理的一些代码的简化版本,一种玩具模型,因此我只能专注于困扰我的那一点。 这就是为什么我定义了一个函数来查找最小值,而不是简单地使用 numpy 命令。 在我的正确代码中,需要一个功能,因为它不像使用预先存在的 numpy 函数那么简单。
我想要做的是在最低点将我的列表分成 2 个列表 - 所以考虑到我在这里的情况,我理想情况下会得到[15, 62, 49, 49, 4] and [100, 71, 16, 70, 62]
。 然而,我不明白这一点。 我得到了存储在 node1 中的所有点,而在 node2 中没有任何点。 我真的不知道为什么 - 正如你所看到的,我尝试了两种方法来做 for 循环。 我完全知道代码的想法,循环应该遍历列表的索引,然后将这些索引的值存储在新列表 node1 和 node2 中。 我究竟做错了什么?
#generate random list of numbers
import random
randomlist = [] #==profile_coarse
for i in range(0,10):
n = random.randint(1,100)
randomlist.append(n)
print(randomlist)
#define a function to find minimum
def get_min(list):
mini=np.min(randomlist)
return mini
node1=[]
node2=[]
for i in enumerate(randomlist):
if i<=get_min(randomlist):
node1.append(randomlist[i])
else:
node1.append(randomlist[i])
#OR
for i in range(0,len(randomlist)):
if i<get_min(randomlist):
node1.append(randomlist[i])
else:
node1.append(randomlist[i])
print(node1,node2)
这产生
[15, 62, 49, 49, 4, 100, 71, 16, 70, 62] []
enumerate
返回一个计数器元组(默认情况下从 0 开始)和您传递的迭代中的一个值。
在你的代码中, i
会是 (0, 15), (1, 62)... 等等。
我的猜测是你只是想for i in randomlist
请记住,在任何情况下,使用min
函数都会将所有值放在一个节点中,而不是像您希望的那样放在 2 中。
您可以使用内置函数enumerate
和min
:
randomlist = [15, 62, 49, 49, 4, 100, 71, 16, 70, 62]
#define a function to find minimum
def get_min(l):
mini= min(enumerate(l), key=lambda x: x[1])
return mini
index_min, min_val = get_min(randomlist)
node1 = randomlist[:index_min + 1]
node2 = randomlist[index_min + 1:]
打印(节点1,节点2)
print(node1)
print(node2)
输出:
[15, 62, 49, 49, 4] [100, 71, 16, 70, 62]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.