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中谈论“数组”时,他们指的是固定大小的数组,通常是固定大小的对象,如stdlibarray
模块、第三方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中谈论“数组”时,他们指的是固定大小的数组,通常是固定大小的对象,比如stdlibarray
模块提供的数组