Поиск соответствия перевернутой строки в списке строк

#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) .