我对在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)
答案 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])