多个变量的理解列表,以便将结果连接成字符串列表
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']
我有两个列表。 我想连接以获得字符串列表。 第一个列表由字符串组成 第二个列表由时间戳组成。
我会将如下内容与理解列表串联起来。
#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
在提问之前我阅读了
尝试使用 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']