我要连接三个列表,以便每个列表中每个列表中排序的相同项合并为一个字符串。
例如, 我有一个天列表,一个月列表和一个年列表,我想合并到一个新列表中,这样我就有一个完整的日期,但在日月和月年之间有“-”。
如果day [0] ='15',month [0] ='Mar'和year [0] ='2012',则日期应在'15 -Mar-2012'末尾类似,依此类推。
使用列表推导功能不起作用,因为我只是每个列表中每个项目的合并日期都有迭代。任何帮助将不胜感激!
day = ['15', '09', '25', '03', '04', '05', '17', '14', '23', '20', '06', '19', '15', '04', '16', '22', '25', '08', '12', '18', '25', '15', '04', '24', '17', '13', '17', '18', '03', '23', '30', '22', '23', '16']
month = ['Mar', 'Apr', 'Apr', 'May', 'Jun', 'Jun', 'Jul', 'Mar', 'Jul', 'Aug', 'Sep', 'Jun', 'Oct', 'Jan', 'Apr', 'Oct', 'Oct', 'Nov', 'Feb', 'Jun', 'Feb', 'Dec', 'May', 'Feb', 'Nov', 'Dec', 'Apr', 'Apr', 'Aug', 'May', 'May', 'Aug', 'May', 'May']
year = ['2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2013', '2013', '2014', '2014', '2011', '2015', '2015', '2011', '2012', '2016', '2011', '2016', '2012', '2016', '2012', '2016']
combined = [i + '-' + j + '-' + k for i in day for j in month for k in year]
答案 0 :(得分:1)
鉴于三个列表的长度相同(在此示例中,它们的长度相同),则可以使用以下列表理解:
combined = [day[i] + '-' + month[i] + '-' + year[i] for i in range(len(day))]
可以这样表示为for
循环:
combined = []
for i in range(len(day)):
combined.append(day[i] + '-' + month[i] + '-' + year[i])
此列表理解通过获取列表中特定点的所有匹配信息来利用所有列表大小相同的事实。
事先,您的列表理解可以表示为:
combined = []
for i in day:
for j in month:
for k in year:
combined.append(i + '-' + j + '-' + k)
在days
len(day) * len(month) * len(years)
中循环遍历,这就是为什么您不会获得预期结果的原因。
答案 1 :(得分:1)
由于列表的长度都相同,因此可以使用zip
进行组合:
>>> ['{}-{}-{}'.format(*t) for t in zip(day,month,year)]
['15-Mar-2012', '09-Apr-2012', '25-Apr-2012', '03-May-2012', '04-Jun-2012', '05-Jun-2012', '17-Jul-2012', '14-Mar-2012', '23-Jul-2012', '20-Aug-2012', '06-Sep-2012', '19-Jun-2012', '15-Oct-2012', '04-Jan-2012', '16-Apr-2012', '22-Oct-2012', '25-Oct-2012', '08-Nov-2012', '12-Feb-2013', '18-Jun-2013', '25-Feb-2014', '15-Dec-2014', '04-May-2011', '24-Feb-2015', '17-Nov-2015', '13-Dec-2011', '17-Apr-2012', '18-Apr-2016', '03-Aug-2011', '23-May-2016', '30-May-2012', '22-Aug-2016', '23-May-2012', '16-May-2016']