【问题标题】:Split a list in for loop based on indices of list根据列表的索引在 for 循环中拆分列表
【发布时间】:2020-03-24 11:20:00
【问题描述】:

这是我正在编写的一些代码的简化版本,是一种玩具模型,因此我可以只专注于让我感到困扰的部分。这就是为什么我定义了一个函数来查找最小值,而不是简单地使用 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] []

【问题讨论】:

    标签: python list for-loop


    【解决方案1】:

    您可以使用内置函数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]
    

    【讨论】:

    • 完美——就是这样!非常感谢
    【解决方案2】:

    enumerate 返回一个计数器的元组(默认从 0 开始)和您传递的可迭代对象中的一个值。

    在您的代码中,i 将是 (0, 15)、(1, 62)... 等等。

    我猜你只是想做for i in randomlist

    请记住,使用min 函数在任何情况下都会将所有值放在一个节点中,而不是像您希望的那样放在 2 中。

    【讨论】:

    • 不错!谢谢你的回复,我不知道。非常有用的信息!
    猜你喜欢
    • 2017-09-07
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2013-09-05
    • 2020-01-14
    • 2020-07-30
    • 2016-09-01
    相关资源
    最近更新 更多