为什么我的循环不能作为单行工作?

时间:2017-02-21 19:13:25

标签: python numpy

我对在python中使用嵌套单行for循环有疑问。特别是,我有以下几点:

A = [[tmp1[a][b] / tmp2[a] for b in range(0,10)] for a in range(0,20)]

根据Here,循环的单行等同于

for a in range(0,20):
    for b in range (0, 10):
        A.append(tmp1[a][b] / tmp2[a])

但是,python给了我以下错误:

  

AttributeError:'numpy.ndarray'对象没有属性'append'。

我应该如何修改结构,以便使用double for循环而不是嵌套for loop的单行?

更新

A=[]
for a in range(0,20):
    B = []
    for b in range (0, 10):
        B.append(tmp1[a][b] / tmp2[a])
   A.append(B)

2 个答案:

答案 0 :(得分:1)

如果你这样做:

for a in range(0,20):
    for b in range (0, 10):
        A.append(tmp1[a][b] / tmp2[a])

A应该是具有属性append的列表:

A=[]
for a in range(0,20):
    for b in range (0, 10):
        A.append(tmp1[a][b] / tmp2[a])

此方法不同,它是list comprehension(创建列表的方式):

A = [tmp1[a][b] / tmp2[a] for a in range(0,20) for b in range(0,10)]

答案 1 :(得分:1)

设置列表理解有两种方法

day

生成一个单位列表。

此:

A = [tmp1[a][b] / tmp2[a] for a in range(0,20) for b in range(0,10)]

生成嵌套列表。

请务必注意两个for语句之间的交换。在嵌套的情况下,缓慢变化的变量是最后的,在平面情况下它首先出现。

等效循环

B = [[tmp1[a][b] / tmp2[a] for b in range(0,10)] for a in range(0,20)]

A=[]
for a in range(0,20):
    for b in range (0, 10):
        A.append(tmp1[a][b] / tmp2[a])