1

たとえば、タプルを取得しました

a = ('chicken', 1, 'lemon', 'watermelon', 'camel')

bから新しいタプルを作成したいのですaが、少し変更します

d = {0: 'apple', 1: 'banana', 2: 'lemon', 3: 'watermelon'}

b = (a[0], d[a[1]], a[2], a[3], a[4])

それを行う別の方法

b = list(a)
b[1] = d[b[1]]
b = tuple(b)

それらはすべて機能しますが、ばかげているように見えます。

この仕事をする別のエレガントな方法はありますか?または、元のタプルを変更するためのスキルはありますか?

4

2 に答える 2

4

これは、すべてのアイテムをチェックするため、あなたのアイテムと比較すると少し非効率的ですが、一般的な考え方は、の各アイテムを調べてa、一致するキーをチェックし、d見つかった場合はそのキーの値を返すというものです。 。キーが見つからない場合は、元のアイテムが返されます。

In [1]: a = ('chicken',1,'lemon','watermelon','camel')

In [2]: d = {0:'apple',1:'banana',2:'lemon',3:'watermelon'}

In [3]: b = tuple(d.get(x, x) for x in a)

In [4]: b
Out[4]: ('chicken', 'banana', 'lemon', 'watermelon', 'camel')

In [5]: type(b)
Out[5]: <type 'tuple'>
于 2013-01-18T08:06:05.580 に答える
1

「エレガント」の意味はわかりませんが、「d」にキーを持つ「a」タプルの要素を置き換えるだけのより一般的なものが必要な場合は、ジェネレータ式を使用して次のようにすることができます。

>>> a
('chicken', 1, 'lemon', 'watermelon', 'camel')
>>> d
{0: 'apple', 1: 'banana', 2: 'lemon', 3: 'watermelon'}
>>> tuple(d[x] if x in d else x for x in a)
('chicken', 'banana', 'lemon', 'watermelon', 'camel')

タプルは不変であるため、新しいタプルを構築します。

于 2013-01-18T08:21:02.430 に答える