#python #string #list #reverse
#python #строка #Список #обратный
Вопрос:
Я изучаю Python, один месяц, и я борюсь со следующей проблемой:
В магазине мороженого есть список вкусов:
ВКУСЫ = [ «Банановый», «Шоколадный», «Лимонный», «Фисташковый», «Малиновый», «Клубничный», «Ванильный», ]
Они хотят составить список всех альтернатив мороженого со вкусом 2 шариков. Вкусы не могут быть повторены: ie. Шоколадный банан не может быть указан, поскольку банановый шоколад уже есть в списке. Я должен распечатать список.
Вот мой код:
result = []
sub_result = ""
for ice in FLAVORS:
for other_ice in FLAVORS:
if ice == other_ice:
continue
sub_result = ice ", " other_ice
if reversed(sub_result) in result:
continue
result.append(sub_result)
print ('n'.join([item for item in result ])) '''
Я не могу заставить скрипт обойти обратную итерацию предпочтений.
Комментарии:
1. Вы объединяете строки, если вы перевернете
'Ban, Schok'
, вы получите'kohcS ,naB'
… отладьте свой код с помощью печати! Соберите 2 варианта в списке и переверните список. Использовать', '.join(yourflavorlist)
для печати. Обращение["Schok","Ban"]
даст вам["Ban","Schok"]
2. Спасибо, Патрик. Я попробую свой скрипт с вашими рекомендациями.
Ответ №1:
Прежде всего, reversed
переворачивает итерацию. Он возвращает итератор, а не строку! И вы не хотите переворачивать строку, потому что это дало бы вам такие вещи, как 'nomeL ,etalocohC'
.
Во-вторых, используйте тот факт, что вы уже знаете, какие элементы у вас уже есть в обратном порядке!
FLAVORS = [ "Banana", "Chocolate", "Lemon", "Pistachio", "Raspberry", "Strawberry", "Vanilla"]
result = []
for i, ice in enumerate(FLAVORS):
for other_ice in FLAVORS[i 1:]:
result.append(f'{first_flavor} {second_flavor}')
print('n'.join(result))
Комментарии:
1. Прекрасный и четкий, спасибо, что напомнили мне, что я могу использовать index!
Ответ №2:
Использование sub_result = ice ", " other_ice
создает sub_result
строку. Например, для Banana
и Chocolate
вы получаете 'Banana, Chocolate'
. Вам нужно ('Banana', 'Chocolate')
.
Вместо этого вам нужно использовать tuple
или list
:
sub_result = tuple(reversed((ice, other_ice)))
Обратите внимание на приведение к tuple
— это потому reversed
, что возвращает объект, а не обратный ввод. Объект должен интерпретироваться как требуемый тип.
Комментарии:
1. Спасибо за комментарий. Я попытаюсь реализовать это в своем коде и опробовать. Jasmijn предложил более простое решение, чем мой код, но мне все еще нужно правильно настроить рефлексы. Почему я не использовал индекс, я не знаю! 🙂
2. В этом случае нет необходимости
reversed
. Вместо этого вы можете просто проверить(other_ice, ice)
.