#python
#python
Вопрос:
Я пытаюсь сравнить каждую букву списка со следующей, и если вычитание меньше 1, я бы хотел, чтобы сравниваемое число было напечатано.
lis=[2,3,5,6,7,8,0,4,2,5,6,8,9,4,2,]
for number in lis:
if lis[number 1]-lis[number]==1:
print (number)
Вывод
2
3
0
4
2
9
4
2
Код полностью пропускает 5,6,7
Но выводит числа, которые на самом деле не соответствуют инструкции.
Кто-нибудь может объяснить, пожалуйста?
Заранее спасибо
Комментарии:
1. Можете ли вы опубликовать код?
Ответ №1:
Вы путаете индексы списка со значениями.
Например, первый элемент вашего списка имеет индекс 0, но значение 2. Следующая имеет индекс 1, но значение 3. Следующая имеет индекс 2, но значение 5. При использовании lis[index]
результатом является значение.
Когда вы используете for number in lis
, это перебирает значения, а не индексы.
Вот один из способов сделать то, что, я думаю, вы собираетесь:
lis=[2,3,5,6,7,8,0,4,2,5,6,8,9,4,2,]
for index, value in enumerate(lis[:-1]): #don't go all the way to the end because you're comparing with the next
if lis[index 1]-value <= 1: #you wanted less than, right?
print (value)
Комментарии:
1. Для справки, это анти-шаблон , позволяющий не использовать zip для перебора двух списков.
2. Я согласен, что ваше решение более элегантное — поскольку в OP, похоже, есть некоторая путаница в основах списков, я подумал, что было бы проще оставаться простым. (Я также не уверен, что это действительно случай итерации по двум спискам.)
3. Конечно, просто говорю! 😉
4. По какой-то причине Python по-прежнему выдает мне сообщение об ошибке в конце печати с надписью «индекс списка вне диапазона». Я предполагаю, что программа достигает последнего номера списка и не имеет никакого номера для сравнения? Спасибо за вашу помощь, я только начинаю ее изучать, извините, если я немного медленный
5. Я только что понял, что все испортил. Я набрал [::-1] , что полностью изменило ситуацию. Теперь все работает нормально! Большое спасибо!
Ответ №2:
Вы также можете перебирать список по паре последовательных элементов, используя нарезку и zip
:
lis = [2,3,5,6,7,8,0,4,2,5,6,8,9,4,2,]
for n, m in zip(lis, lis[1:]):
if m - n == 1:
print(n)