首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回重复项。

函数返回重复项。
EN

Stack Overflow用户
提问于 2016-11-18 20:41:44
回答 4查看 127关注 0票数 1

目前我的清单是:

代码语言:javascript
复制
[[(881, 886), ('Twilight Sparkle', 'Rainbow Dash')],
 [(883, 885), ('Applejack', 'Rarity')], 

[(887, 884), ('Princess Celestia', 'Pinkie Pie')],

 [(888, 882), ('Princess Luna', 'Fluttershy')]]

我希望它能有这样的格式:

代码语言:javascript
复制
   [(pid1, pname1, pid2, pname2),

 (pid3, pname3, pid4, pname4), 

(pid5, pname5, pid6, pname6), 

(pid7, pname7, pid8, pname8)] 

所以它是player1,name 1,player2,name 2

更好的做法是在前面的zip函数中用不同的方式压缩它,还是现在就操作列表。

我想要去做

代码语言:javascript
复制
temp = x[1]
x[1] = x[2]
x[2] = x[3]

但我不知道该怎么做。

这是zip函数:

代码语言:javascript
复制
for i in range(0,length, 2):
    pairs =zip(list[i],list[i+1])

在拉链之前,它是以这种格式进行的:

代码语言:javascript
复制
[(881, 'Twilight Sparkle'), (886, 'Rainbow Dash'),
 (883, 'Applejack'), (885, 'Rarity'), 
(887, 'Princess Celestia'), (884, 'Pinkie Pie'),
 (888, 'Princess Luna'), (882, 'Fluttershy')]

是否有一种方法可以更改zip函数,使其将前两个放在列表中,然后放在第二个列表中,等等,但却保持id、name、id、name的顺序,而不是将id和name组合起来?

我希望它的格式是:

代码语言:javascript
复制
[(881, 'Twilight Sparkle',886, 'Rainbow Dash'),
 (883, 'Applejack',885, 'Rarity'), 
(887, 'Princess Celestia', 884, 'Pinkie Pie'),
 (888, 'Princess Luna', 882, 'Fluttershy')]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-18 20:48:33

看起来你根本不想拉链,你只是想把两对元组连在一起:

代码语言:javascript
复制
players = [(881, 'Twilight Sparkle'), (886, 'Rainbow Dash'),
           (883, 'Applejack'), (885, 'Rarity'),
           (887, 'Princess Celestia'), (884, 'Pinkie Pie'),
           (888, 'Princess Luna'), (882, 'Fluttershy')]
pairs = [players[i] + players[i + 1] for i in range(0, len(players), 2)]
for pair in pairs:
    print(pair)

输出:

代码语言:javascript
复制
(881, 'Twilight Sparkle', 886, 'Rainbow Dash')
(883, 'Applejack', 885, 'Rarity')
(887, 'Princess Celestia', 884, 'Pinkie Pie')
(888, 'Princess Luna', 882, 'Fluttershy')
票数 1
EN

Stack Overflow用户

发布于 2016-11-18 20:50:48

您可以将zip()itertools.chain()连同列表理解一起使用,如:

代码语言:javascript
复制
from itertools import chain

[tuple(chain(*zip(*item))) for item in my_list]

返回:

代码语言:javascript
复制
[(881, 'Twilight Sparkle', 886, 'Rainbow Dash'), 
(883, 'Applejack', 885, 'Rarity'), 
(887, 'Princess Celestia', 884, 'Pinkie Pie'), 
(888, 'Princess Luna', 882, 'Fluttershy')]

其中my_list是问题中提到的初始列表

票数 3
EN

Stack Overflow用户

发布于 2016-11-18 20:48:12

在这里,列出理解可能是一种更好的方法:

代码语言:javascript
复制
[(item[0][0], item[1][0], item[0][1], item[1][1]) for item in l]

所以作为你的例子

代码语言:javascript
复制
players = [[(881, 886), ('Twilight Sparkle', 'Rainbow Dash')],
           [(883, 885), ('Applejack', 'Rarity')], 
           [(887, 884), ('Princess Celestia', 'Pinkie Pie')],
           [(888, 882), ('Princess Luna', 'Fluttershy')]]

你会得到

代码语言:javascript
复制
players_reformatted = [(item[0][0], item[1][0], item[0][1], item[1][1]) for item in players]

这给

代码语言:javascript
复制
[(881, 'Twilight Sparkle', 886, 'Rainbow Dash'), 
 (883, 'Applejack', 885, 'Rarity'), 
 (887, 'Princess Celestia', 884, 'Pinkie Pie'), 
 (888, 'Princess Luna', 882, 'Fluttershy')]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40685603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档