Python объединяет три списка в один в определенном формате - PullRequest
1 голос
/ 22 июня 2019

У меня есть три списка, которые я хочу сделать в один список (включая все 4 возможных комбинации для каждой страны), строка должна быть следующей:

query = f'c_code={country}&min_age={age[0]}&max_age={age[1]}&gender={gender}'

, т.е. в каждой стране будет 4Строки, я сделал следующие три для циклов, чтобы сделать это, но я считаю, что это не очень питонно.

country_abb=['ID', 'IR', 'IQ', 'IE', 'IM', 'IL', 'IT', 'CI', 'JM', 'JP', 'JE', 'JO', 'KI', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS', 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MK', 'MG', 'MW', 'MY', 'MV', 'ML', 'MT', 'MH', 'MQ', 'MR', 'MU', 'YT', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MS', 'NA', 'NP', 'NL', 'NC', 'NZ', 'NI', 'NE', 'NG', 'MP', 'NO', 'OM', 'PK', 'PW']
genders = ['male','female']
ages_range = [[16,25],[26,50]]
all_queries = []
for country in country_abb:
    for gender in genders:
        for age in ages_range:
            query = f'c_code={country}&min_age={age[0]}&max_age={age[1]}&gender={gender}'
            all_queries.append(query)

Ответы [ 2 ]

4 голосов
/ 22 июня 2019

Вы можете использовать product из itertools.Я не знаю, является ли это чем-то более питоническим, но это немного короче, и я нахожу это более читабельным, но я полагаю, что ваш пробег может варьироваться:

from itertools import product

country_abb=['ID', 'IR', 'IQ', 'IE', 'IM', 'IL', 'IT', 'CI', 'JM', 'JP', 'JE', 'JO', 'KI', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS', 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MK', 'MG', 'MW', 'MY', 'MV', 'ML', 'MT', 'MH', 'MQ', 'MR', 'MU', 'YT', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MS', 'NA', 'NP', 'NL', 'NC', 'NZ', 'NI', 'NE', 'NG', 'MP', 'NO', 'OM', 'PK', 'PW']
genders = ['male','female']
ages_range = [[16,25],[26,50]]
all_queries = []

for country, gender, age in product(country_abb, genders, ages_range):
    query = f'c_code={country}&min_age={age[0]}&max_age={age[1]}&gender={gender}'
    all_queries.append(query)

product создает список спискагде каждый элемент оригинальных списков объединяется, очень похоже на вложенные циклы в оригинальном посте.Вы можете прочитать больше об этом в документации по Python здесь .(Спасибо, @roganjosh, за предложение добавить ссылку.)

1 голос
/ 22 июня 2019

Вы также можете просто использовать list comprehension:

country_abb=['ID', 'IR', 'IQ', 'IE', 'IM', 'IL', 'IT', 'CI', 'JM', 'JP', 'JE', 'JO', 'KI', 'KW', 'KG', 'LA', 'LV', 'LB', 'LS', 'LR', 'LY', 'LI', 'LT', 'LU', 'MO', 'MK', 'MG', 'MW', 'MY', 'MV', 'ML', 'MT', 'MH', 'MQ', 'MR', 'MU', 'YT', 'MX', 'FM', 'MD', 'MC', 'MN', 'ME', 'MS', 'NA', 'NP', 'NL', 'NC', 'NZ', 'NI', 'NE', 'NG', 'MP', 'NO', 'OM', 'PK', 'PW']
genders = ['male','female']
ages_range = [[16,25],[26,50]]

all_queries = [
    f"c_code={country}&min_age={age[0]}&max_age={age[1]}&gender={gender}"
    for age in ages_range
    for gender in genders
    for country in country_abb
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...