2012-10-25 31 views
1

这听起来像一个简单的问题。但是,给定一个:修改“元组列表”结构中的某些内容而不破坏python中的结构

a = [[(1,2)], [(3,4), (5,6)], [(7,8), (9,10), (11,12)]] 

我怎么能加1到每个元组的第一个项目,所以我得到的follwing?

b = [[(2,2)], [(4,4), (6,6), [(8,8), (10,10), (12,12)]] 

我试过代码如下:

b = [] 

for list_of_tuples in a: 
    for num1, num2 in list_of_tuples: 
     b.append((num1+1, num2)) 

b 

但是,这会破坏原来的结构。那么,怎样才能得到我想要的,使用两个for-loops?

回答

0

你几乎在正确的轨道,但你也需要添加容器列表元组首先到B,重现原有的结构

a = [[(1,2)], [(3,4), (5,6)], [(7,8), (9,10), (11,12)]] 

b = [] 

for list_of_tuples in a: 
    b.append([]) 
    for num1, num2 in list_of_tuples: 
     b[-1].append((num1+1, num2)) 

print b 

输出:

[[(2, 2)], [(4, 4), (6, 6)], [(8, 8), (10, 10), (12, 12)]] 
+0

谢谢,但是b [-1]在那里意味着什么? – user1775726

+0

b [-1]表示列表b中的最后一项,我们向b添加了一个列表并且正在访问它,以便我们可以向它追加元组 –

4

使用嵌套列表理解:

>>> a = [[(1,2)], [(3,4), (5,6)], [(7,8), (9,10), (11,12)]] 
>>> b = [[(x+1, y) for x, y in tuples] for tuples in a] 
>>> b 
[[(2, 2)], [(4, 4), (6, 6)], [(8, 8), (10, 10), (12, 12)]] 

作为for与清单理解:

b = [] 
for tuples in a: 
    b.append([(x+1, y) for x, y in tuples]) 

没有任何列表理解:

b = [] 
for tuples in a: 
    tuples_b = [] 
    for x, y in tuples: 
     tuples_b.append((x+1, y)) 
    b.append(tuples_b) 
+0

哦,这太好了..我尝试了列表理解..但是,我有b = [(x + 1,y)为x,y为元组中的元组],这意味着我没有在另一个中嵌入一个。 – user1775726

+0

+1。作为一般规则,当你发现自己试图找出如何修改结构时,问你是否可以使用理解来生成新副本。有时候不可能,或者太复杂,或者太空间效率太低,但大多数情况下这是正确的答案。 – abarnert

1

使用map()isinstance()

def func(x): 
    if isinstance(x,list): 
     return map(func,x) 
    elif isinstance(x,tuple): 
     return (x[0]+1,x[1]) 

a = [[(1,2)], [(3,4), (5,6)], [(7,8), (9,10), (11,12)]] 
print map(func,a) 

输出:

[[(2, 2)], [(4, 4), (6, 6)], [(8, 8), (10, 10), (12, 12)]] 
0

你卡住了元组吗?将它们转换为列表可能会更好,因为您正在修改它们。