如果我有列表例如:
['6'] #Number
['!'] #Punctuation
['r'] #Alphabet
['8'] #Number
['/'] #Punctuation
['e'] #Alphabet
['5'] #Number
[':'] #Punctuation
['l'] #Alphabet
我使用data = line.strip().split(' ')
将其从csv文件转换为此格式。
我试图将列表中的元素分配给它们各自的变量
例如,数字将包含其中包含数字的列表,标点符号将包含其中包含标点符号的列表,字母表将包含带字母的列表。
我无法理解的是,如果我做了类似
的事情number = data[0], punc = data[1], alpha = data[2]
我收到错误:
List index out of range.
那么我该如何解决这个问题?
我的代码,
for line in new_file:
text = [line.strip() for line in line.split(' ')]
答案 0 :(得分:1)
这部分代码似乎没问题
for line in new_file:
text = [line.strip() for line in line.split(' ')]
但是,如果您正在执行以下操作
for line in new_file:
text = [line.strip() for line in line.split(' ')]
number = text[0], punc = text[1], alpha = text[2]
您可能会遇到问题......例如,您的文件中的一行
"hello world"
如果你拆分这行,你会有一个像[" hello"," world"]的列表。这个列表包含两个元素。
现在,如果您将此结果指定为text=["hello", "world"]
并将此结果放在像
这样的变量中alpha = text[2]
你肯定会收到List index out of range.
..为什么?
因为文字[2]不存在!
某些行可能包含少于3个单词(如本例所示)
修改您的方法
尝试使用字典方法
alpha={"alphabet":[]}
numb={"alphabet":[]}
punc={"punctuation":[]}
..遍历文件并使用列表理解来选择所有标点符号,字母等,并将其添加到相应的字典元素中......如果您在修改代码时遇到问题
编辑工作示例我将如何解决此问题
假设我有一个名为new_file的文件,其内容如下
hello my name is repzERO
AND THIS IS my age: 100 years
我试过的一个python脚本
import re
new_file=open("new_file","r")
alpha={"alphabet":[]}
numb={"number":[]}
punc={"punctuation":[]}
all_punctuation=""
for line in new_file:
alpha["alphabet"]+=[c for c in line if re.search("[a-zA-Z ]",c)]
numb["number"]+=[c for c in line if re.search("[0-9]",c)]
punc["punctuation"]+=[c for c in line if re.search("[^\w\s]",c)]
print(alpha)
print(numb)
print(punc)
输出
{'alphabet': ['h', 'e', 'l', 'l', 'o', ' ', 'm', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'r', 'e', 'p', 'z', 'E', 'R', 'O', 'A', 'N', 'D', ' ', 'T', 'H', 'I', 'S', ' ', 'I', 'S', ' ', 'm', 'y', ' ', 'a', 'g', 'e', ' ', ' ', 'y', 'e', 'a', 'r', 's']}
{'number': ['1', '0', '0']}
{'punctuation': [':']}
答案 1 :(得分:0)
您的列表中的元素似乎较少。
这样的事情:
yourVariableName = ["what", "ever", "elements", "are", "here"]
称为列表。上面的列表有5个元素。您可以使用数字索引i
:
yourVariableName[i]
i
在这种情况下0
,1
,2
,3
或4
(或者你想要的是负数)从最后算起)。当你尝试
yourVariableName[5]
甚至更高,您会收到“索引超出范围”错误。