难以使用*来解压缩zip()函数中的字段列表

时间:2015-03-06 22:34:48

标签: python list zip tuples dataframe

这个问题与以下主题有关:

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']视为一串字母,而在第二种情况下,它会对待它他们喜欢数据框中的字段,然后查看里面的值。

感谢这里的所有帮助。提前谢谢!

1 个答案:

答案 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])