列出python中的迭代(将值赋给变量)

时间:2015-11-07 19:43:46

标签: python list

如果我有列表例如:

['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(' ')]

2 个答案:

答案 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在这种情况下01234(或者你想要的是负数)从最后算起)。当你尝试

yourVariableName[5]

甚至更高,您会收到“索引超出范围”错误。