Python:将列表与列表的列表组合

Python: Combining a list with a list of lists

首先我给出了一个以年+月为字符串的列表:

li1 = ["2018-01-", "2018-02-", "2018-03-"]

其次,我有一个包含每个月日期的列表列表:

li2 = [["1", "2", "3"],["1","2"],["5","9"]]

我想实现以下结果:

combined_list = ["2018-01-1", "2018-01-2", "2018-01-3", "2018-02-1", "2018-02-2", "2018-03-5", "2018-03-9"]

到目前为止我尝试了什么:

datum = []
count = -1
for y in l1:
    for d in li2:
        count += 1
        name = y + d[count]
        datum.append(name)

出现以下错误:“IndexError:列表索引超出范围”。 问题:

  1. 有没有办法解决这个问题?
  2. 如何在循环中重置计数器?

试试这个:

li1 = ["2018-01-", "2018-02-", "2018-03-"]
li2 = [["1", "2", "3"],["1","2"],["5","9"]]

new_lst = [f"{li1_e}{li2_e2}" for li1_e in li1 for li2_e in li2 for li2_e2 in li2_e]

print(new_lst)

输出:

['2018-01-1', '2018-01-2', '2018-01-3', '2018-01-1', '2018-01-2', '2018-01-5', '2018-01-9', '2018-02-1', '2018-02-2', '2018-02-3', '2018-02-1', '2018-02-2', '2018-02-5', '2018-02-9', '2018-03-1', '2018-03-2', '2018-03-3', '2018-03-1', '2018-03-2', '2018-03-5', '2018-03-9']

使用 zip 和列表理解

例如:

li1 = ["2018-01-", "2018-02-", "2018-03-"]
li2 = [["1", "2", "3"],["1","2"],["5","9"]]

result = [f"{i}{k}" for i, j in zip(li1, li2) for k in j]
print(result)
# --> ['2018-01-1', '2018-01-2', '2018-01-3', '2018-02-1', '2018-02-2', '2018-03-5', '2018-03-9']