首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在for循环中创建列表

问在for循环中创建列表
EN

Stack Overflow用户
提问于 2020-10-06 21:58:36
回答 4查看 161关注 0票数 1

不知道是否有人可以帮助我解决我的一个小问题的代码。

代码语言:javascript
复制
list1 = [1,2,4]
dz = 0.5
k = max(list1)/dz
print('k =',k)
list1_diff = np.insert(np.diff(list1),0,1)
for item in list1_diff:
    #Number of times to repeat number
    repeats = item/dz
    vec = [np.random.normal(0,1)]*int(repeats)
    print(vec)

这就产生了

代码语言:javascript
复制
[-0.7014481088047718, -0.7014481088047718]
[3.1264015795601274, 3.1264015795601274]
[0.44017976879654314, 0.44017976879654314, 0.44017976879654314, 0.44017976879654314]

这是在做正确的事情,但我希望循环的输出是这三个列表作为一个列表。所以它应该是

代码语言:javascript
复制
[-0.7014481088047718, -0.7014481088047718, 3.1264015795601274, 3.1264015795601274, 0.44017976879654314, 0.44017976879654314, 0.44017976879654314, 0.44017976879654314]
EN

回答 4

Stack Overflow用户

发布于 2020-10-06 22:05:33

你不是笨蛋。如果我没记错的话,您希望根据您的公式有一个包含重复随机数的列表。您只需对代码稍作修改,如下所示:

代码语言:javascript
复制
list1 = [1,2,4]
dz = 0.5
k = max(list1)/dz
print('k =',k)
list1_diff = np.insert(np.diff(list1),0,1)
# create your empty result list, where you add the random numbers in the loop
vec= list()
for item in list1_diff:
    # Number of times to repeat number
    repeats = item/dz
    # add the new random number with it's repeats to the vec list
    # using extend
    vec.extend([np.random.normal(0,1)]*int(repeats))
# print the result outside the loop, after it has been constructed
print(vec)
票数 1
EN

Stack Overflow用户

发布于 2020-10-06 22:14:45

试试这个:

代码语言:javascript
复制
import numpy as np

list1 = [1,2,4]
dz = 0.5
k = max(list1)/dz
print('k =',k)
list1_diff = np.insert(np.diff(list1),0,1)
final_list=[]
for item in list1_diff:
    #Number of times to repeat number
    repeats = item/dz
    vec = [np.random.normal(0,1)]*int(repeats)
    final_list += vec
print(final_list)
票数 1
EN

Stack Overflow用户

发布于 2020-10-06 22:05:45

这应该可以完成这项工作:

代码语言:javascript
复制
import numpy as np

list1 = [1,2,4]
dz = 0.5
k = max(list1)/dz
print(f'k = {k}')

lst = [[np.random.normal(0,1)]*int(item/dz) for item in np.insert(np.diff(list1),0,1)]
flatten = lambda l: [item for sublist in l for item in sublist]

print(flatten(lst))

输出:

代码语言:javascript
复制
k = 8.0
[-1.1762058341816053, -1.1762058341816053, -1.0599923573472354, -1.0599923573472354, 0.6374252888036466, 0.6374252888036466, 0.6374252888036466, 0.6374252888036466]

事情是这样的:

  • 列表理解,可创建包含输出的列表(主要是您所做的内容)应用于list

的

  • 展平函数

请注意,您也可以使用extend(),我本打算添加它的,但另一个答案抢先一步使用了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64227357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档