这个问题与以下主题有关:
How would you zip an unknown number of lists in Python?
我正在处理一个包含两个字段的数据框(merged_data)(" campaignName"" creativeName")我想生成一个列表两个字段中每对成对的值组合。根据上面的指导,这里是我认为可以做到的代码:
print varlist
print merged_data[varlist]
combo = zip(*merged_data[varlist])
print combo
combo2 = zip(merged_data[varlist[0]], merged_data[varlist[1]])
print combo2
但是这里有两个zip命令的结果(我以为它会生成相同的元组列表):
[' campaignName',' creativeName']
campaignName creativeName
0 MMedia Whatsapp 12-24-14 Pic1-Angle1-300x250
1 MMedia Whatsapp 12-24-14 Pic1-Angle1-300x250
...
89 MMedia Whatsapp 12-25-14 Pic4-Angle1-300x250
[90 rows x 2 columns]
[('c', 'c'), ('a', 'r'), ('m', 'e'), ('p', 'a'), ('a', 't'), ('i', 'i'), ('g', 'v'), ('n', 'e'), ('N', 'N'), ('a', 'a'), ('m', 'm'), ('e', 'e')]
[('MMedia Whatsapp 12-24-14', 'Pic1-Angle1-300x250'), ('MMedia Whatsapp 12-24-14', 'Pic1-Angle1-300x250'), ('MMedia Whatsapp 12-24-14', 'Pic1-Angle1-300x250'), ..., ('MMedia Whatsapp 12-25-14', 'Pic4-Angle1-300x250')]
知道发生了什么事吗?显然,在第一种情况下,它将[' campaignName',' creativeName']视为一串字母,而在第二种情况下,它会对待它他们喜欢数据框中的字段,然后查看里面的值。
感谢这里的所有帮助。提前谢谢!
答案 0 :(得分:0)
这两个陈述实际上并不相同:
combo1=zip(*combo = zip(*merged_data[varlist])
相当于:
combo1=zip(merged_data[varlist][0],merged_data[varlist][1],merged_data[varlist][2]....)
而不是
combo1=zip(merged_data[varlist[0]],merged_data[varlist[1]])
(注意方括号的位置)
字符串只是Python的序列,所以它为你解包它们
我倾向于认为zip(* args)与zip相反:
list1=[1,2,3,4,5]
list2=[10,11,12,13,14]
zippedlist=zip(list1,list2)
print zippedlist
>>>>[(1,10),(2,11),(3,12),(4,13),(5,14)]
print zip(*zippedlist)
>>>>[(1,2,3,4,5),(10,11,12,13,14)]
编辑:
可以实现combo2
函数的开放式版本:
combo2=zip([merged_data[v] for v in varlist])