цикл и объединить, чтобы создать новый список - PullRequest
2 голосов
/ 21 марта 2019

Какой самый эффективный способ сделать следующее?

A = ["A","B","C"]
B = [range(19,21)]

Итог списка:

C = ["A19", "B19", "C19", "A20", "B20", "C20"] 

большое спасибо!

Ответы [ 4 ]

5 голосов
/ 21 марта 2019

itertools.product также может использоваться:

from itertools import product

A = ["A","B","C"]
C = [a + str(n) for n, a in product(range(19, 21), A)]

обратите внимание, что существуют разные способы форматирования строки (a) и числа n в одну строку:

a + str(n)
"{}{}".format(a, n)
f"{a}{n}"  # for python >= 3.6
3 голосов
/ 21 марта 2019

Используйте понимание списка:

A = ["A","B","C"]
B = range(19,21)
print([x+str(y) for y in B for x in A])

Или, если версия выше Python 3.6:

print([f"{x}{y}" for y in B for x in A])

Вывод:

['A19', 'B19', 'C19', 'A20', 'B20', 'C20']

Редактировать:

Используйте это:

A = ["X","Y","Z"]
B = range(19,21)
C = [x+str(y) for y in B for x in A]
print(C)
curveexpression = ""
for zoo in "Animal":
    for month in C:
        arrival += "[%s,%s];" % (zoo, month)
print(arrival)
0 голосов
/ 21 марта 2019

Для диапазона в списке:

B = [*range(19, 21)]:

C = [a + str(b) for b in B for a in A]
0 голосов
/ 21 марта 2019

Вы можете использовать следующий listcomp:

from itertools import product

A = ["A","B","C"]
B = range(19,21)

[i + j for i, j in product(A, map(str, B))]
# ['A19', 'A20', 'B19', 'B20', 'C19', 'C20']

или

from itertools import product
from operator import concat

[concat(*i) for i in product(A, map(str, B))]
# ['A19', 'A20', 'B19', 'B20', 'C19', 'C20']

Если вы хотите построить список из диапазона, используйте функцию list():

list(range(19, 21))
# [19, 20]
...