#python #python-3.x #list #list-comprehension
#python #python-3.x #Список #понимание списка
Вопрос:
Возможно ли преобразовать подобный цикл в понимание списка?
lst_a = []
lst_b = []
lst_c = []
test_dict = {'a':1, 'b':2, 'c':3, 'd':4}
for k, v in test_dict.items():
lst_a.append(k)
lst_b.append(k.upper())
lst_c.append((k k))
Например, к чему-то вроде этого:
lst_a, lst_b, lst_c = [list comprehension logic here for the above loop]
Примечание: выходные данные должны представлять собой три отдельных списка, подобных тому, который находится в цикле.
Ответ №1:
Попробуйте с zip()
:
test_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
lst_a, lst_b, lst_c = zip(*[(k, k.upper(), k k) for k in test_dict])
# Convert them to list
# lst_a, lst_b, lst_c = map(list, zip(*[(k, k.upper(), k k) for k in test_dict)]))
# Iterate this dict three times.
# lst_a, lst_b, lst_c = ([k for k in test_dict], [k.upper() for k in test_dict], [k k for k in test_dict])
print(lst_a,lst_b,lst_c)
Ответ №2:
Простейший подход с использованием понимания списка
lst_a = []
lst_b = []
lst_c = []
test_dict = {'a':1, 'b':2, 'c':3, 'd':4}
[[lst_a.append(k), lst_b.append(k.upper()), lst_c.append(k k)] for k in test_dict]
print(lst_a, lst_b, lst_c)
вывод —
['a', 'b', 'c', 'd'] ['A', 'B', 'C', 'D'] ['aa', 'bb', 'cc', 'dd']
Комментарии:
1. Обычно считается плохой практикой использовать понимание списка из-за его побочных эффектов — и это также неэффективно, поскольку вы также создаете список списков
None
, которые вы сразу же выбросите.