私はこの解決策が過剰であると感じ、組み込み関数を正しく使用していない可能性があります。複数の変数に操作を適用
誰かが同じ操作を変数のリストに適用するより良い方法を提案できますか?
EDIT - または(それが可能の場合)
size = 150
free = 27
used = 123
size, free, used = list(map(lambda x: x * 1024, [size, free, used]))
私はこの解決策が過剰であると感じ、組み込み関数を正しく使用していない可能性があります。複数の変数に操作を適用
誰かが同じ操作を変数のリストに適用するより良い方法を提案できますか?
EDIT - または(それが可能の場合)
size = 150
free = 27
used = 123
size, free, used = list(map(lambda x: x * 1024, [size, free, used]))
"splat"アンパックを使用すると、リストまたはタプルの項目をNamedTupleコンストラクタに渡すことができます。例えば、
from collections import namedtuple
TheTuple = namedtuple('TheTuple', ('size', 'free', 'used'))
size = 150
free = 27
used = 123
t = (size, free, used)
foo = TheTuple(*[1024 * x for x in t])
print(foo)
出力
TheTuple(size=153600, free=27648, used=125952)
これもジェネレータ式で動作します: "ダブル・スプラット" を使用して、ここで
foo = TheTuple(*(1024 * x for x in (size, free, used)))
そしてdict
バージョンだオペレータ**
:
d = dict(
size = 150,
free = 27,
used = 123
)
foo = TheTuple(**{k: 1024 * v for k, v in d.items()})
は、私はおそらく理解/ジェネレータ式を使用する値を再割り当てすることなく、それらを変更するのではなくlist
、map
とlambda
:
size, free, used = (x * 1024 for x in (size, free, used))
しかし、もし3つの名前を別々のエンティティ(単一のリスト/タプル/ numpyのアイテムの配列ではなく)にすることが本当に有利なのであれば、すべてを書き出す方が良いかもしれません...
size *= 1024
free *= 1024
used *= 1024
size, free, used=[x*1024 for x in [size, free, used]]
答えを説明するために少しの解説を追加したいかもしれません。 –
あなたは、単にそのようなタプルやリストで、何とか化合物のように見えるあなたの変数を、保存することができます:
mv = [1024, 27, 123]
を次に、すべてのあなたの変換を適用するために、リストの内包表記を使用します
mv = [i * 1024 for i in mv]
あなたがnumpy
を使用している場合、あなたはまた、を使用することができます。それらの10と(それがデフォルトではない)その要素のそれぞれに変換を適用します。これはあなたのコード内でその唯一の使用であれば
mv = np.array([1024, 27, 123])
mv *= 1024
しかし、あなたは間違いなくがnumpy
をインポートすることは避けてください。
'[i * for my_vars]' - ここでの冗長性は、リストや辞書の代わりに個々の変数であるという事実からくるものです。 – deceze
'int'sは変更できません:変更不可能なので、再割り当てする必要があります。しかし、あなたはそれをわずかに最適化することができます: 'size、free、used = map(lambda x:x * 1024、(size、free、used))' –
'size = 150 * 1024;無料= 27 * 1024; used = 123 * 1024'? – chepner