2013-05-02 2 views
0

Итак, у меня есть кортеж вроде этого:Замена последнего значения в списке кортежей

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

и я хочу, чтобы заменить последнее значение каждого кортежа с 100. Так что я могу сделать:

b=[(t[0],t[1],) + (100,) for t in a] 

это дает мне это:

[(1, 2, 100), (4, 5, 100), (7, 8, 100)]. 

Что ярлык? Эти кортежи, в реале, имеют в нем 50 элементов?

ответ

10

Использование Кортеж нарезка:

[t[:-1] + (100,) for t in a] 

Там нет необходимости строить совершенно новый кортеж из отдельных элементов здесь.

+0

Хотя алгоритмически 'tuple (цепочка (islice (t, 0, len (t) -1), (100,)))' немного лучше ... На практике это, вероятно, будет значительно быстрее I думаю. (+1) – mgilson

+0

@mgilson: для более коротких кортежей кусочек кортежа будет * намного быстрее, чем 'islice()', поскольку Python будет повторно использовать кешированные объекты tuple; нет распределения памяти, детка! –

Смежные вопросы