【问题标题】:Python3: Append to list inside two for loopsPython3:追加到两个for循环内的列表
【发布时间】:2018-09-27 07:02:26
【问题描述】:

我有以下代码,它总结了从正态分布中抽取的最多 100 个随机数,直到它达到 -10 或 +10:

import numpy as np
mylist=[]
summ = 0
for x in range(100):
    i = np.random.randn()
    summ += i
    mylist.append(i)
    if summ < -10 or summ >10:
        break

现在我想运行 500 次,从而创建一个包含 500 个列表的列表,每个列表都包含数字。我想把它放在另一个 for 循环中:

for p in range(500):
    templist = []
    for x in range(100):
        i = np.random.randn()
        summ += i
        templist.append(i)
        if summ < -10 or summ >10:
            mylist.append(templist)
            break

除了我现在不知道如何将元素 i 附加到列表中...

更新:我更新了代码,因此首先将随机数添加到临时列表 templist,一旦总和超出限制,它就会将此列表附加到 mylist .但是,仍然无法正常工作!

【问题讨论】:

  • 您想循环 500 次,但要创建 200 个列表?这将如何运作?
  • 打错了,对不起! 500 次得到 500 个列表!
  • p 循环之外创建另一个列表。在p 循环内开始一个新的mylist,并在x 循环完成后将其附加到外部列表。
  • 您要创建 500 个当前值为 i 的列表吗?然后您不需要将其附加到新列表中。只需用它初始化列表:mylist.append([i])
  • 如果您的总和从未达到上限或下限,您将如何处理?不是每个列表元素的总和都大于 10 或小于 -10 是故意的吗?

标签: python-3.x numpy for-loop


【解决方案1】:
mylist = []
for p in range(500):
    new_list = []
    summ = 0
    for x in range(100):
        i = np.random.randn()
        summ += i
        new_list.append(i)
        if summ < -10 or summ >10:
            break
    mylist.append(new_list)

【讨论】:

  • 我喜欢这段代码,因为它连接到我已经知道的内容。但是,mylist 中的列表大多是大小为 1 的,事实并非如此。
  • 已更新。 summ 在之前的代码中没有设置为 0。
  • 当然!否则if 将永远是真的!谢谢!
【解决方案2】:

您可以执行任何函数 500 次,并使用装饰器将结果保存在列表中。只需将您的功能放在一个函数中:

import numpy as np

def execute_500_times(func):

    def multiplying_func(*args, **kwargs):
        list_of_results = list()
        for _ in range(500):
            list_of_results.append(func(*args, **kwargs))
        return list_of_results

    return multiplying_func

@execute_500_times
def myfunc():
    mylist=list()
    summ = 0
    for x in range(100):
        i = np.random.randn()
        summ += i
        mylist.append(i)
        if summ < -10 or summ >10:
            break

    return mylist

result = myfunc()

这样做的一个好处是装饰器函数也可以被其他函数重用,而不是仅仅修改你的原始函数。

【讨论】:

  • 可能是一个非常好的解决方案,只是我的python3熟练程度不高
  • @rororo: this tutorial 如果你想进入装饰器,这是一个很好的起点。
猜你喜欢
  • 1970-01-01
  • 2019-03-09
  • 2018-03-10
  • 2018-11-16
  • 1970-01-01
  • 2020-08-26
  • 2015-03-28
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多