2015-11-07 55 views
0

如果我有列表,例如:列表迭代在Python(赋值给变量)

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

你可以添加你的代码质疑吗? – Kasramvd

+0

好的,我已经在问题中输入了我的代码! – Luke

+0

@Luke请用你的代码编辑这个问题 –

回答

0

你的列表似乎有更少的元件。

事情是这样的:

yourVariableName = ["what", "ever", "elements", "are", "here"] 

被称为列表。上面的列表有5个元素。您可以用数字索引i访问的元素:

yourVariableName[i] 

其中i在这种情况下要么01234(或当你想从末端数负数)。当你尝试

yourVariableName[5] 

甚至更​​高,你会得到一个“索引超出范围”的错误。

+0

我知道该怎么做,我的列表的元素较少,但我的任务是将其分配给一个变量! 如果第1行有['5'],那意味着数字=数据['我不知道这是什么指数'] 相同的标点符号和字母! 这只是我无法理解的索引用法。 你解释的是非常基本的,我知道该怎么做 – Luke

+0

你的意思是你想追加一个元素到列表中?像'list.append(“无论”)'?或者你是否想要一本字典? –

+0

是的,我想追加。我相信字典会是一个更简单的方法! – Luke

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] 

你可以在你的文件下面跑进problems..take例如线

"hello world" 

如果你分割这一行,你将会得到一个像[“hello”,“world”]这样的列表。 ns两个元素。

现在,如果您分配这个结果像text=["hello", "world"]

,你把这个结果在一个变量一样

alpha = text[2] 

你一定会收到List index out of range. ..Why?

因为文本[2]不存在!

某些行可能包含少于3个字(就像这个例子)

修改你的方法

尝试使用字典方法

alpha={"alphabet":[]} 
numb={"alphabet":[]} 
punc={"punctuation":[]} 

..iterate通过文件并使用列表理解选择所有的标点符号,字母等,并将其添加到各自的字典元素......如果您在发布修改后的代码时遇到问题

编辑工作的例子我将如何解决这个

让说我有一个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': [':']} 
+0

我努力尝试,但无法获得任何地方! 使用字典是个好主意,但我的程序如何进行,找到某些元素是不可能的! 我的主要问题是,如果我有我发布在我的问题的列表,我将如何发现一个特定的元素让我们说['r']这是第3行。 使用索引我想! data ['x']其中x是一些索引,我不知道如何使用程序从整个文件携带列表中打印['r']! – Luke

+0

做了轻微的修改 – repzero

+0

啊!搜索功能..帮助我! 谢谢 – Luke