Возвращаемая строка соответствует двум спискам для заданного количества элементов в третьем списке
У меня появилось ощущение, что мне придётся пойти в "руководство для начинающих" или что у вас есть, но у меня есть этот код здесь, который идет
does = ['my','mother','told','me','to','choose','the']
it = ['my','mother','told','me','to','choose','the']
work = []
while 5 > len(work):
for nope in it:
if nope in does:
work.append(nope)
print (work)
И я получаю
['my', 'mother', 'told', 'me', 'to', 'choose', 'the']
Почему это? И как я могу убедить его вернуться
['my', 'mother', 'told', 'me']
Ответы
Ответ 1
Вы можете попробовать что-то вроде этого:
for nope in it:
if len(work) < 5 and nope in does:
work.append(nope)
else:
break
Проблема с вашим кодом заключается в том, что он проверяет длину работы после прокрутки всех элементов it
и добавил все из них, которые находятся в does
.
Ответ 2
Вы можете сделать:
does = ['my','mother','told','me','to','choose','the']
it = ['my','mother','told','me','to','choose','the']
work = []
for nope in it:
if nope in does:
work.append(nope)
work = work[:4]
print (work)
Он просто делает список без проверки длины, затем разрезает его и оставляет только 4 первых элемента.
Ответ 3
В качестве альтернативы, чтобы немного приблизиться к исходной логике:
i = 0
while 4 > len(work) and i < len(it):
nope = it[i]
if nope in does:
work.append(nope)
i += 1
# ['my', 'mother', 'told', 'me', 'to']
Ответ 4
Просто для удовольствия, здесь однострочный без импорта:
does = ['my', 'mother', 'told', 'me', 'to', 'choose', 'the']
it = ['my', 'mother', 'told', 'me', 'to', 'choose', 'the']
work = [match for match, _ in zip((nope for nope in does if nope in it), range(4))]