【问题标题】:Python will not append to list in for loopPython不会追加到for循环中的列表
【发布时间】:2017-06-27 17:13:15
【问题描述】:

我基本上是在尝试切换数组数组;我的初始数据是:

array = [
    [0,0,0],
    [1,1,1]
    ]

输出应该是:

    [
    [0,1],
    [0,1],
    [0,1]
    ]

然而我得到的是:

[]

我已经尝试在没有循环的情况下做同样的事情,但是当我介绍它们时它不会追加!

在此处查看代码:

array = [
    [0,0,0],
    [1,1,1]
    ]
transformedArray = []
#add rows to transformed
for j in range(0, len(array) - 1):
    transformedArray.append([])
#for each row
for i in range(0, len(array[0]) - 1):
    #for each column
    for k in range(0, len(array) - 1):
        transformedArray[i].append(array[k][i])

你能帮忙吗?我在网上没有发现任何类似的问题,所以我猜我错过了一些愚蠢的事情!

【问题讨论】:

  • 请注意,当您执行range(0, len(array[0]) - 1) 时,您不会遍历每一行,因为range 停止参数是专有的。不过,就目前而言,我相信无论如何您都会遇到索引错误,因为您混淆了“行”和“列”。
  • 另外,执行 transpose 操作的惯用方式如下:list(zip(*array))。只要我在挑剔,你就在使用 lists 而不是 arrays.
  • @juanpa.arrivillaga 过了一会儿我想通了;我已经看了这么长时间了,现在一切都在我的脑海中混在一起!

标签: arrays list python-3.x for-loop


【解决方案1】:

尝试嵌套循环:

array = [
    [0,0,0],
    [1,1,1]
    ]
transformedArray = [[0,0],[0,0],[0,0]]

# iterate through rows
for i in range(len(array)):
   # iterate through columns
   for j in range(len(array[0])):
         transformedArray[j][i] = array[i][j]

for res in transformedArray:
     print(res)

返回:

[0, 1]
[0, 1]
[0, 1]

编辑添加说明

首先,列表在上面的代码中定义为:aList = [ ... ] 其中一个数组将被定义为anArray = numpy.array([...]),所以就上面的 cmets 而言,这是 list 在问题,不是真正的python数组过程。接下来,元素被按索引添加到列表中,因此必须有一个放置它们的地方。我通过创建一个已经存在 3 个元素的列表来处理这个问题。原始帖子只会创建前 2 行,然后在创建第 3 行时出现索引失败。然后嵌套的 for 循环遍历嵌入的列表。

【讨论】:

  • 我认为明确说明您在此处修复的错误是值得的,即stop 参数到range 的非一错误。顺便说一句,在 Python 中对列表进行转置的惯用方式是 list(zip(*array))
  • 当然。首先,列表在上面的代码中定义:aList = [ ... ] 其中一个数组将被定义为anArray = array([...]),所以就上面的 cmets 而言,这是问题中的列表处理,而不是真正的 python 数组处理。接下来,元素被按索引添加到列表中,因此必须有一个放置它们的地方。我通过创建一个已经存在 3 个元素的列表来处理这个问题。原始帖子只会创建前 2 行,然后在创建第 3 行时出现索引失败。然后嵌套的 for 循环遍历嵌入的列表。
  • 我的意思是问题本身:) 我冒昧地将其添加到您的答案中。您可以根据需要编辑/删除它。
  • 我也想通了;基本上是在研究同一件事几个小时,只是看不出我做错了什么!感谢您的帮助!
【解决方案2】:

您可以通过在所有数组上映射一系列索引访问操作来做到这一点:

for i in range( len( array[0] ) ):
    transformedArray.append( map( lambda x: x[i], array ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2018-11-16
    • 2013-09-16
    • 2020-07-02
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多