繁体   English   中英

根据列表的索引在 for 循环中拆分列表

[英]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 中。

您可以使用内置函数enumeratemin

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM