从Python中的元组列表2.7解压缩项目
我有3个列表,我以特定的方式(使用izip)进行组合。那么我正在对元组的列表进行计算。但是,一旦计算完成,我需要'撤消'这个操作来获取原始列表(尽管有些值已更改)。有没有一个简单的pythonic这样做?从Python中的元组列表2.7解压缩项目
grouped = []
med_done = 0
lrg_done = 0
#While items exist in small, pair up one item from each list
grouped.extend(list(izip(sml,med,lrg)))
done = len(sml)
# While items remain in med, pair up one from med an two from lrg
grouped.extend(list(izip(med[done:],lrg[done::2],lrg[(done+1)::2])))
done = done + (2*(len(med)-len(sml)))
# Finish pairing up remaining items from lrg
grouped.extend(list(izip_longest(lrg[done::3],lrg[(done+1)::3],lrg[(done+2)::3],fillvalue = '-')))
这将产生:
smlBinary:[6 6 7 7 7 8 6 8 7]
medBinary:[4 3 4 3 3 3 5 5 4 5 3 5 3 3 4 4]
lrgBinary:[0 1 2 0 0 2 1 1 1 1 1 2 2 2 0 2 2 1 2 1 2 1 0 1 2 1 0 2 1 2 0 1 0 1 0 1]
Grouped[(6, 4, 0), (6, 3, 1), (7, 4, 2), (7, 3, 0), (7, 3, 0), (8, 3, 2), (6, 5, 1), (8, 5, 1), (7, 4, 1), (5, 0, 1), (3, 2, 0), (5, 0, 2), (3, 1, 1), (3, 1, 1), (4, 1, 2), (4, 2, 2), (1, 2, 1), (0, 2, 1), (2, 0, 1), (0, 1, 0), (1, '-', '-')]
问题: 现在是不是也有类似的技术,我可以用“解除配对”这些物品回去拿原来的名单?
所以,如果我的理解正确,你只需要将元组拆分成列表?不知道很多关于izip,但它看起来像你可以只用几个列表内涵做到这一点:
sm_out = [tup[0] for tup in grouped]
med_out = [tup[1] for tup in grouped]
lg_out = [tup[2] for tup in grouped]
可以使用的可变参数的组合和ZIP功能解压。
unzipped = zip(*zipped)
哪里zipped
是你grouped
变量。
嗨@EyuelDK,是的,我希望能够使用类似的东西,但是我需要像3部分一样做izip部分,但不使用循环。 –
我不明白你的评论,但在你的情况下,'解压缩'应该成为长度为3的数组,其中每个数组是原始数据,即sml,med,lrg。 – EyuelDK
Hi @Anddrrw,如果它被均匀配对,你的方法可以很好地工作,但配对工作的方式意味着我不能在整个“分组”列表中使用单一方法。至少它必须分三部分完成。 –