1

int私は2つの異なるオブジェクトからの同一の変数の2つのキーセットを持っていますが、1つは最初の要素を0で開始し、もう1つは1で開始します

a = 0, b = 5, c = 7 # var_abc
x = 1, y = 6, d = 6 # var_xyz

他のプロセスを実行するには、var_xyz を次のように変換する必要があるvar_xyz == var_abcため、var_xyz の各変数に対して次の行をコーディングする必要があります。

x,y,z = x-1, y-1, z-1

単純に var_xyz で変数をインスタンス化する場合は、次のようにすることもできます。

x,y,z = (0,)*3

var_xyz の変数ごとに var-1 をハードコードする必要がないような別の方法はありますか? var_xyz に 1000 個の変数があるとします。

4

4 に答える 4

3

変数が 1000 個の場合の重複は厄介なことに気付きましたが、これは良いことです。これは、抽象化の 1 レベル上に移動する必要があることを示唆しています。これにより、1,000 個の変数の代わりに、1 つのリストまたは 1 つの辞書を作成し、ループすることができます。

たとえば、変数を 0 から数えることが理にかなっている場合は、リストを使用できます。

>>> vv = [10,20,30,40,50]
>>> vv[3]
40

次に、リスト内包表記を使用して減算を行います。

>>> vv = [v-1 for v in vv]
>>> vv
[9, 19, 29, 39, 49]
>>> vv[3]
39

または、変数に名前があることが重要な場合は、辞書を使用できます。

>>> # first, let's make a test dictionary
>>> from string import ascii_lowercase
>>> d = {k: i for i, k in enumerate(ascii_lowercase[:10])}
>>> d
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'j': 9}
>>> d['d']
3

減算を単純化するために辞書内包表記を使用します。

>>> d = {k: v-1 for k,v in d.iteritems()}
>>> d['d']
2
于 2013-09-24T20:33:21.303 に答える
0

できるよ:

x,y,z = [v - 1 for v in (x,y,z)]

ただし、可能性のある 1000 変数のシナリオには役立ちません。個別の変数の代わりにlistorを使用する以外に、何をしたいのかは不明です。dict

于 2013-09-24T20:29:53.450 に答える
-1

私があなたを正しく理解していれば、リスト内包表記を使用できます。

orig_list = [x,y,z]
minus_list = [value - 1 for value in orig_list]
# if desired put a,b,c up there or...
a,b,c = minus_list
于 2013-09-24T20:29:49.747 に答える
-4

リストまたは辞書を使用します。それでおしまい。

于 2013-09-24T20:29:06.480 に答える