【问题标题】:Problems regarding conversion of List to Array in PythonPython 中关于 List 到 Array 的转换问题
【发布时间】:2018-07-26 18:11:34
【问题描述】:

我想做什么:

我想创建一个数组并将列表中的每个项目添加到数组中。这是我目前所拥有的:

count = 0
arr = []

with open(path,encoding='utf-8-sig') as f:
    data = f.readlines() #Data is the List



for s in data:    
    arr[count] = s
    count+=1

我做错了什么?我得到的错误是 IndexError: list assignment index out of range

【问题讨论】:

  • arr.append(s)..
  • 术语挑剔:您的代码中没有数组。 arr 是一个列表。所以你真的在问“我如何将列表转换为列表?”

标签: python arrays python-3.x list


【解决方案1】:

当您尝试访问索引0 处的arr 时,那里什么都没有。你想要做的就是添加它。你应该这样做arr.append(s)

【讨论】:

    【解决方案2】:

    您的arr 是一个空数组。所以,arr[count] = s 给出了那个错误。

    要么用空元素初始化你的数组,要么使用数组的append 方法。由于您不知道要向数组中输入多少元素,因此在这种情况下最好使用append 方法。

    for s in data:    
        arr.append(s)
        count+=1
    

    【讨论】:

      【解决方案3】:

      值得退后一步,问问你想在这里做什么。

      f 已经是一个可迭代的行:你可以用for line in f: 循环。但它是“懒惰的”——一旦你循环它一次,它就消失了。而且它不是一个序列——你可以循环它,但你不能用索引或像f[20]f[-10:]这样的切片随机访问它。

      f.readlines() 将其复制到行列表中:您可以循环并索引。虽然文件为此具有 readlines 方法,但这并不是真正必要的——您可以通过调用 list(f)any 可迭代转换为这样的列表。

      您的循环似乎是在尝试创建另一个相同行的列表。您只需使用list(data) 即可。虽然不清楚为什么首先需要另一个列表。


      此外,“数组”一词可能会引起混淆。

      Python 列表是一个动态数组,可以索引和修改,也可以通过追加、插入和删除元素来调整大小。所以,从技术上讲,arr 是一个数组。

      但通常当人们在 Python 中谈论“数组”时,他们指的是固定大小的数组,通常是固定大小的对象,例如 stdlib array 模块、第三方 numpy 库提供的对象,或者特殊用途类型,例如内置 bytearray

      一般来说,将列表或其他可迭代对象转换为其中任何一个都与转换为列表相同:只需调用构造函数即可。例如,如果您有一个 0-255 之间的数字列表,您可以使用bytearray(lst) 来获取相同数字的字节数组。或者,如果您有一个浮点值列表,np.array(lst) 将为您提供一个 2D numpy 浮点数组。以此类推。


      那么,为什么你的代码不起作用?

      当您编写arr = [] 时,您正在创建一个包含 0 个元素的列表。

      当您编写arr[count] = s 时,您尝试将列表中的countth 元素设置为s。但是 没有 countth 元素。您正在写超出列表末尾的内容。

      一种选择是改为致电arr.append(s)。这使得列表 1 元素比以前更长,并将 s 放入新槽中。

      另一种选择是首先创建一个大小合适的列表,例如arr = [None for _ in data]。然后,arr[count] = s 可以将countth 槽中的None 替换为s

      但如果你真的只是想在另一个列表中复制data,最好只使用arr = list(data)arr = data[:]

      如果您不需要其他副本,只需使用arr = data,或按原样使用data — 或者,如果它满足您的需求,只需在第一个使用f地点。

      【讨论】:

        【解决方案4】:

        似乎您来自 matlab 或 R 背景。当您执行arr=[] 时,它会创建一个空列表,而不是数组。

        import numpy
        count = 0   
        with open(path,encoding='utf-8-sig') as f:
            data = f.readlines() #Data is the List
        
        size = len(data)
        array = numpy.zeros((size,1))
        
        for s in data:    
            arr[count,0] = s
            count+=1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-15
          • 2012-10-19
          • 2020-11-24
          • 2020-12-07
          • 2015-08-09
          • 2011-07-23
          相关资源
          最近更新 更多