Как выполнить итерацию по этому списку и иметь ту же длину исходного списка?

#python

#python

Вопрос:

Я хочу иметь результат, который имеет ту же длину, что и исходный список.

 listo = ['med', 'lam', 'rihanna', 'shity', 'lem']
lis = []
for i, v in enumerate(listo):
    if 'lam' in v:
        lis.append(v)
    if 'med' in v:
        lis.append(v)
    else:
        lis.append('no')
    
print(lis)
print(len(listo))
print(len(lis))
  

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

1. elif 'med' in v:

2. вместо этого просто сделайте второй if elif

3. lis = [i if i in {'lam', 'med'} else 'no' for i in listo]

4. хотя я не знаю, почему вы это enumerate делаете..

Ответ №1:

Самое быстрое изменение — сделать второе if elif значение таким образом, чтобы к выходным данным для каждого элемента во входных данных добавлялось только одно значение.

 listo = ['med', 'lam', 'rihanna', 'shity', 'lem']
lis = []
for i, v in enumerate(listo):
    if 'lam' in v:
        lis.append(v)
    elif 'med' in v:
        lis.append(v)
    else:
        lis.append('no')
  

Более питонический способ написания того же кода — использовать понимание списка.

 listo = ['med', 'lam', 'rihanna', 'shity', 'lem']
lis = [x if x in ('lam', 'med') else 'no' for x in listo]
  

Ответ №2:

Ваш второй оператор if должен быть elif . Вот так:

 listo = ['med', 'lam', 'rihanna', 'shity', 'lem']
lis = []
for i, v in enumerate(listo):
    if 'lam' in v:
        lis.append(v)
    elif 'med' in v:
        lis.append(v)
    else:
        lis.append('no')
    
print(lis)
print(len(listo))
print(len(lis))
  

Когда это просто обычное, если ошибка возникает при значении ‘lam’. Первый оператор if имеет значение true, поэтому он добавляет ‘lam’ к lis, но второй оператор false, поэтому он также добавляет ‘no’ к lis.