2015-11-07 3 views
0

Если у меня есть списки, например:Списки итерации в питона (Присвоение значений переменных)

['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 в этом случае либо 0, 1, 2, 3 или 4 (или отрицательное число, если вы хотите считать от конца). Когда вы попробуете

yourVariableName[5] 

или даже выше, вы получаете ошибку «индекс вне диапазона».

+0

Я знаю, как это сделать, в моем списке меньше элементов, но моя задача - назначить его переменной! , если строка 1 имеет ['5'], что означает число = данные ['я не знаю, какой индекс идет здесь'] тот же для puctuation и alphabets! Это просто использование этого индекса я не могу понять. То, что вы объяснили, довольно просто, и я знаю, как это сделать – Luke

+0

Вы хотите добавить элемент в список? Как 'list.append (" whatever ")'? Или вы предпочитаете словарь? –

+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" 

, если разделить эту строку вы будете иметь список как [ «привет», «мир»]. этот список содер ns два элемента.

Теперь, если вы назначаете этот результат, как text=["hello", "world"]

и вы поместите этот результат в переменной, как

alpha = text[2] 

Вы наверняка ПРИИМИ List index out of range. ..Why?

Потому что текст [2] не существует!

Некоторые строки могут содержать менее 3 слова (как в данном примере)

Пересмотрите ваш подход

Попробуйте использовать словарь подход

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

..iterate через файл и используйте использование списка для выбора всех знаков препинания, букв и т. д. и добавьте его в соответствующие словарные элементы ... Если у вас возникли проблемы с отправкой ваших пересмотренных кодов

EDIT РАБОЧИЙ ПРИМЕР КАК БЫ РЕШАТЬ ЭТУ

Пусть говорит, у меня есть файл с именем new_file и имеет содержание ниже

hello my name is repzERO 
AND THIS IS my age: 100 years 

питон скрипт Я попытался

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

Ah! функция поиска .. Помогает мне! Спасибо – Luke

Смежные вопросы