Вопрос о печати нескольких элементов в списке в заданном порядке c в Python - PullRequest
2 голосов
/ 04 марта 2020

Так что я какое-то время ломал голову над этим и решил обратиться к вам, замечательные люди. Проблема, которую я пытаюсь выяснить, заключается в том, как печатать элементы в списке в определенном порядке c. У меня есть список:

m= ['dog','cat','horse','cow','woof','meow','neigh','moo']

И я хочу, чтобы мои результаты выглядели так:

'The dog goes woof'
'The cat goes meow'
'The horse goes neigh'
'The cow goes moo'

До сих пор я пробовал следующий код:

m= ['dog','cat','horse','cow','woof','meow','neigh','moo']

for i in m[:4]:
    print('The ' + i + ' goes ' + str(x for x in m[4:]))

Мои результаты:

'The dog goes <generator object <genexpr> at 0x01177C70>'
'The cat goes <generator object <genexpr> at 0x01177C70>'
'The horse goes <generator object <genexpr> at 0x01177C70>'
'The cow goes <generator object <genexpr> at 0x01177C70>'

Теперь я обнаружил, что оператор 'x' просто возвращает значение 'None', поэтому я не получаю желаемых результатов. Кто-нибудь может дать мне некоторое понимание? Любая помощь будет оценена. Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 04 марта 2020

Выражение (x for x in m[4:]) называется выражением генератора и представляет собой объект, который может генерировать вещи, вероятно, не совсем то, что вам нужно.

Это решит вашу проблему:

m = ['dog','cat','horse','cow','woof','meow','neigh','moo']

for i in range(4):
    print('The ' + m[i] + ' goes ' + m[i + 4])
3 голосов
/ 04 марта 2020

Идея списка или массива, как правило, состоит в том, чтобы хранить однородные данные - если у вас есть имена животных и звуки животных, они различны, и структура данных должна различать guish их.

например, разделите ваш список на два списка и заархивируйте их в список пар

m= ['dog','cat','horse','cow','woof','meow','neigh','moo']
for pair in zip(m[:4], m[4:]):
  print(f"the {pair[0]} goes {pair[1]}")

Хотя приведенное ниже Остином слово "для x, y" более идиоматично c

3 голосов
/ 04 марта 2020

Вы можете zip через список:

m = ['dog','cat','horse','cow','woof','meow','neigh','moo']

for x, y in zip(m, m[4:]):
    print(f'The {x} goes {y}')

# The dog goes woof
# The cat goes meow
# The horse goes neigh
# The cow goes moo

Для любого списка длины вы можете сделать:

for x, y in zip(m, m[len(m)//2:]):
    print(f'The {x} goes {y}')
0 голосов
/ 05 марта 2020

Harcoding это хорошо, но go с универсальным c дизайном, разделив его на две части:

m= ['dog','cat','horse','cow','woof','meow','neigh','moo']
for pair in zip(m[:len(m)/2], m[len(m)/2:]):
  print(f"the {pair[0]} goes {pair[1]}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...