Подтвердить что ты не робот

Умножение кортежа на скаляр

У меня есть следующий код:

print img.size
print 10 * img.size

это напечатает

(70, 70)
(70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70)

пока я хочу, чтобы он печатал

(700, 700)

Есть ли способ сделать это, не записывая

print (10 * img.size[0], 10 * img.size[1])

PS: img.size - это изображение PIL. Не знаю, если это имеет значение в этом случае.

4b9b3361

Ответ 1

Может быть, лучше, но это должно работать

tuple([10*x for x in img.size])

Ответ 2

img.size = tuple(i * 10 for i in img.size)

Ответ 3

pythonic будет использовать понимание списка:

y = tuple([z * 10 for z in img.size])

Другой способ:

y = tuple(map((10).__mul__, img.size))

Ответ 4

Решение:

set1=(70, 70)
tuple(2*array(set1))

Объяснение: arrays возможно прямое скалярное умножение. Следовательно, tuple, называемый set1, преобразуется в array. Я предполагаю, что вы хотите продолжать использовать tuple, поэтому мы преобразуем array обратно в tuple.

Это решение состоит в том, чтобы избежать явного и подробного цикла for. Я не знаю, быстрее ли это или происходит то же самое в обоих случаях.

Ответ 5

Вероятно, это более простой способ, но

print map(lambda x: 10*x, img.size)

Будет делать то, что вы хотите, хотя оно печатается как список, а не кортеж. Оберните вызов map внутри tuple(map...), если вы хотите, чтобы он печатался как кортеж (скобки, а не квадратные скобки).

Ответ 6

Если у вас есть эта проблема чаще и с большими кортежами или списками, вы можете использовать библиотеку numpy, что позволяет вы должны выполнять всевозможные математические операции над массивами. Однако в этой простой ситуации это было бы полным перегибом.

Ответ 7

Вы можете попробовать что-то вроде этого:

print [10 * s for s in img.size]

Он даст вам новый список со всеми элементами, которые у вас есть в кортеже, умноженным на 10

Ответ 8

В соответствии с предыдущими ответами, но используя numpy:

import numpy as np
result = tuple(10*np.array(img.size))

Ответ 9

добавление ничего, кроме разнообразия.

import operator
img_size = (70, 70)
map(operator.mul, img_size, len(img_size)*(10,))