1

簡単な質問のように聞こえます。しかし、与えられた:

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

次のようになるように、タプルの最初の各項目に 1 を追加するにはどうすればよいですか?

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

しかし、これは元の構造を破壊します。では、2 つの for ループを使用して、どうすれば欲しいものを得ることができるでしょうか?

4

4 に答える 4

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)
于 2012-10-25T23:07:45.397 に答える
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)]]
于 2012-10-25T23:19:57.030 に答える
0

タプルで立ち往生していますか?明らかに変更しているので、それらをリストに変換する方が良いかもしれません。

于 2012-10-25T23:44:43.087 に答える
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)]]
于 2012-10-25T23:07:22.853 に答える