Python中列表到数组的转换问题

Python中列表到数组的转换问题,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,我想做的是: 我想创建一个数组,并将列表中的每个项添加到数组中。这就是我到目前为止所做的: 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 我做错了什么?我得到的错误是索引器:列表分配索引超出范围您的arr是一个空数组。因此,

我想做的是:

我想创建一个数组,并将列表中的每个项添加到数组中。这就是我到目前为止所做的:

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

我做错了什么?我得到的错误是索引器:列表分配索引超出范围

您的
arr
是一个空数组。因此,
arr[count]=s
给出了该错误

要么用空元素初始化数组,要么使用数组的
append
方法。由于您不知道将在数组中输入多少个元素,因此在本例中最好使用
append
方法

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

您的
arr
是一个空数组。因此,
arr[count]=s
给出了该错误

要么用空元素初始化数组,要么使用数组的
append
方法。由于您不知道将在数组中输入多少个元素,因此在本例中最好使用
append
方法

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

当您尝试访问索引
0
处的
arr
时,那里没有任何内容。你要做的就是增加它。您应该执行
arr.append
当您尝试访问索引
0
处的
arr
时,那里没有任何内容。你要做的就是增加它。您应该执行
arr.append(s)

似乎您来自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

看起来你是来自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

退一步问问你在这里想做什么是值得的

f
已经是一个可数行:您可以对f:中的行使用
进行循环。但它是“懒惰的”——一旦你在它上面绕了一圈,它就消失了。它不是一个你可以循环的序列,但是你不能用像
f[20]
f[-10:]
这样的索引或切片随机访问它

f.readlines()
将其复制到一个行列表中:可以循环并索引的内容。虽然文件具有执行此操作的
readlines
方法,但实际上没有必要通过调用
list(f)
将任何iterable转换为类似的列表

您的循环似乎是试图创建相同行的另一个列表。只需使用
列表(数据)
即可。虽然还不清楚为什么你首先需要另一份清单


此外,“数组”一词也暴露了一些可能的混淆

Python列表是一个动态数组,可以对其进行索引和修改,但也可以通过追加、插入和删除元素来调整大小。因此,从技术上讲,
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
但通常当人们在Python中谈论“数组”时,他们指的是固定大小的数组,通常是固定大小的对象,如stdlib
array
模块、第三方
numpy
库或内置
bytearray
等特殊用途类型提供的数组

一般来说,将列表或其他iterable转换为其中任何一个都与转换为列表相同:只需调用构造函数。例如,如果您有一个介于0-255之间的数字列表,则可以执行
bytearray(lst)
以获得相同数字的bytearray。或者,如果您有一个浮点值列表,
np.array(lst)
将为您提供一个二维浮点数组。等等


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

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

当您写入
arr[count]=s
时,您试图将列表中的
count
第th个元素设置为
s
。但是没有
count
th元素。你写的超过了列表的末尾

一个选项是调用
arr.append
。这使得列表1元素比以前更长,并将
s
放入新的插槽中

另一个选项是首先创建一个大小合适的列表,比如
arr=[None for uuu.in data]
。然后,
arr[count]=s
可以将
count
th插槽中的
None
替换为
s

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


如果你不需要另一份,只要做
arr=data
,或者按原样使用
data
,甚至,如果它能满足你的需要,首先就使用
f

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

f
已经是一个可数行:您可以对f:
中的行使用
进行循环。但它是“懒惰的”——一旦你在它上面绕了一圈,它就消失了。它不是一个你可以循环的序列,但是你不能用像
f[20]
f[-10:]
这样的索引或切片随机访问它

f.readlines()
将其复制到一个行列表中:可以循环并索引的内容。虽然文件具有执行此操作的
readlines
方法,但实际上没有必要通过调用
list(f)
将任何iterable转换为类似的列表

您的循环似乎是试图创建相同行的另一个列表。只需使用
列表(数据)
即可。虽然还不清楚为什么你首先需要另一份清单


此外,“数组”一词也暴露了一些可能的混淆

Python列表是一个动态数组,可以对其进行索引和修改,但也可以通过追加、插入和删除元素来调整大小。因此,从技术上讲,
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
但通常当人们在Python中谈论“数组”时,他们指的是固定大小的数组,通常是固定大小的对象,比如stdlib
array
模块提供的数组