多个变量的理解列表,以便将结果连接成字符串列表

List of comprehension on multiple variables in order to concatenate into a list of strings the results

我有两个列表。 我想连接以获得字符串列表。 第一个列表由字符串组成 第二个列表由时间戳组成。

我会将如下内容与理解列表串联起来。

#just for creating something similar to my actual situation
import pandas as pd
quarter=["First Quarter","Second Quarter","Third Quarter","Fourth Quarter"]
quarter_forecast_day=pd.date_range(start="12/15/2020",periods=4)

我想要这样的东西:

str(quarter[x]+'\n'+quarter_forecast[y].strftime("%d/%m/%Y"))

我尝试了什么:

#quarter_label=[str(quarter[x]+'\n'+y.strftime("%d/%m/%Y")) for x,y in [quarter, quarter_forecast_day]]
#too many values to unpack (expected 2)

#quarter_label=[str(quarter[x]+'\n'+y.strftime("%d/%m/%Y")) for x,y in (quarter, quarter_forecast_day)]
#too many values to unpack (expected 2)

#quarter_label=[str(quarter[x]+'\n'+y.strftime("%d/%m/%Y")) for x,y in quarter, quarter_forecast_day]
#invalid sintax

#quarter_label=[lambda x,y:str(quarter[x]+'\n'+y.strftime("%d/%m/%Y") for x,y in [quarter, quarter_forecast]]
#invalid sintax

quarter_label=[lambda x,y:str(quarter[x]+'\n'+y.strftime("%d/%m/%Y") for x,y in (quarter, quarter_forecast)]
#invalid sintax

在提问之前我阅读了, this one and this one。但我仍然在努力寻找合适的方法来应用它。

尝试使用 zip:

quarter_label = [q+'\n'+qf.strftime("%d/%m/%Y") for q, qf in zip(quarter, quarter_forecast_day)]

>>> print(quarter_label)

['First Quarter\n15/12/2020', 'Second Quarter\n16/12/2020', 'Third Quarter\n17/12/2020', 'Fourth Quarter\n18/12/2020']

首先,不需要 str(),因为您要连接 3 个字符串(strftime returns 一个字符串)。

其次,对于双变量理解列表,需要使用两个for循环,如下:

quarter_label = [quarter[x] + '\n' + quarter_forecast[y] for x in range(len(quarter)) for y in range(len(quarter_forecast))]

您的代码存在的问题是您正在迭代列表的项目,但您将它们用作表达式中的索引。使用项目迭代:

quarter_label = [q + '\n' + f for q in quarter for f in quarter_forecast]

结果:

['First Quarter\n15/12/2020', 'First Quarter\n16/12/2020', 'First Quarter\n17/12/2020', 'First Quarter\n18/12/2020', 'Second Quarter\n15/12/2020', 'Second Quarter\n16/12/2020', 'Second Quarter\n17/12/2020', 'Second Quarter\n18/12/2020', 'Third Quarter\n15/12/2020', 'Third Quarter\n16/12/2020', 'Third Quarter\n17/12/2020', 'Third Quarter\n18/12/2020', 'Fourth Quarter\n15/12/2020', 'Fourth Quarter\n16/12/2020', 'Fourth Quarter\n17/12/2020', 'Fourth Quarter\n18/12/2020']