Итерация по кортежу в списке - PullRequest
0 голосов
/ 14 декабря 2018

В настоящее время я пытаюсь перебрать кортеж, который хранится в списке, и распечатать первые 3 элемента.Первоначально он работает, но затем печатает первый индекс еще 3 раза, и я понятия не имею, почему.Следующий код:

if user_choice == "b":
    for x in holiday_database:       
        for i in x:
            if x.index(i) == 0:            
                print("\nPackage ", i)
            if x.index(i) == 1:
                print("Country: ", i)
            if x.index(i) == 2:
                print("City: ", i)

выводит это:

Package  1
Country:  france
City:  paris

Package  1

Package  1

Package  1

Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Похоже, ошибка в данных;результат будет выше, если holiday_database равно [(1, "france", "paris"), (1,), (1,), (1,)]

Однако вы можете переписать код гораздо более кратко несколькими способами.Я предлагаю распаковать кортежи:

for record in holiday_database:
    package_num, country, city = record
    print("\nPackage:", package_num)
    print("Country:", country)
    print("City:", city)

Это работает, потому что package_num, country, city само является выражением кортежа, поэтому python может сопоставлять каждую переменную с данными.Это приведет к ошибке, если кортеж имеет неправильный размер.

0 голосов
/ 14 декабря 2018

Нет необходимости циклически перебирать кортеж.Используйте форматирование строки.Кортежи уже являются типом данных, используемым для аргументов форматирования строки, поэтому все, что вам нужно сделать, это нарезать кортеж.

if user_choice == "b":
    for x in holiday_database:       
        print('\nPackage %d\nCountry: %s\nCity: %s' % x[:3])

Это предполагает, что Package (то есть x[0]) имеет значение intтип данных.Если это str, просто измените %d на %s.

...