Python получает второй элемент из каждого внутреннего списка

#python #python-3.x #list #for-loop #jupyter-notebook

#python #python-3.x #Список #for-цикл #jupyter-notebook

Вопрос:

У меня есть список, который содержит внутренний список (считанный из файла, разделенного запятой), из которого я хотел бы получить второй элемент. Например, в x = [[2,3,4][5,6,7]] я хотел бы получить 3 и 6. Простые вещи, которые, как я думал, я знал, как это сделать. Я знаю, что мог бы попробовать использовать следующий метод для получения вторых чисел:

 fp = open('random.txt') 
x = list(fp.read().split("n"))
x.pop(0) #header line
x = [item.split(",") for item in x]

print([item[1] for item in x])
  

Моя проблема в том, что я могу получить первый элемент, выполнив item[0] приведенный выше код, и это работает нормально. Однако, если я попытаюсь item[1] , я получу ошибку list index out of range. Я попытался просто проверить, был ли мой список правильным в обычном цикле for.

 for item in x:
    print(item[1])
  

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


РЕДАКТИРОВАТЬ: включил остальную часть моего кода

Комментарии:

1. Ваше понимание списка в порядке.. не уверен, почему вы получаете сообщение об ошибке. Убедитесь, что во всех подсписках есть как минимум 2 элемента и что вы правильно разделяете список

2. Ваше редактирование сделало ваш вопрос совершенно другим. Вероятно, у вас есть строки, которые не содержат запятой. Мы не можем сказать больше без примеров данных, которые показали бы проблему.

3. n после последней строки данных — строки после этого нет , , поэтому и [1] тоже нет…

4. print([item[1] for item in x if len(x) > 1] ) исправляет

5. Не удается воспроизвести. Я заметил, что у вас запутанные имена переменных и вы перезаписываете их разными структурами. Возможно, ошибка произошла до / после того, как вы изменили одну из переменных без четкого имени, а не там, где вы представили ее в этом вопросе.

Ответ №1:

Я думаю, что проблема, должно быть, как-то связана с вашим другим кодом. Я только что выполнил следующее:

 x = [[2, 3, 4], [5, 6, 7]]
print([item[1] for item in x])
  

[3,6]

 for item in x:
    print(item)
  

[2, 3, 4]

[5, 6, 7]

 for item in x:
    print(item[1])
  

3

6

Весь опубликованный вами код работает нормально, без ошибок. Вы, должно быть, каким-то образом изменяете свой список, который не опубликован. Я предлагаю вам попробовать print(x) перед его обработкой определить, как выглядит фактическая структура, а затем соответствующим образом обработать ее оттуда.