3

だから私は本質的に同様の名前を持つ要素の非常に大きなリストを持っています(c0、d0、c1、d1 ...など)

そして、文字列を使用してこれらの各要素を生成するスクリプトを本質的に生成するより簡単な方法があるかどうか疑問に思っていました

文字列「c0」を実際の変数c0に変更します

私のプロジェクトに関連する理由から、リストの使用を避け、むしろコードを生成したいと考えています。

みんなありがとう!

4

3 に答える 3

2

まず、これを間違った方法で解釈しないでください。ただし、質問のコードに基づいて Python を初めて使用することを想定しています。これは有効な Python ではありません。あらゆる場所に素晴らしい Python チュートリアルがたくさんあります。Python 関数、ビルトイン、および一般的な哲学について読んでください。これは非常に強力な言語ですが、継承したスクリプトは ... あまり Pythonic ではないようです。そこから言語について間違ったことを学ばないようにしてください。

したがって、理想的には、これらすべての変数を何らかのデータ構造に収集する必要があります。Pythonには、さまざまな種類のものがたくさんあります。

固定されたデータ セットのペアの各インデックスを比較するだけでよい場合は、タプルを使用する必要はありません。タプルは順序付けされた不変のコレクションであり、構造の一部を暗示しています。nペアのデータがあるとしましょう。2 つのタプルがあり、それらをcおよびdと呼びましょう。しかし、可能であればわかりやすい名前を使用する方が明らかに優れています。次のようになります。

c = (c0, c1, c2, ... cn)
d = (d0, d1, d2, ... dn)

そして、それらを次のようなものと比較します。

for i in range(len(c)):
    if c[i] == d[i]:
        print '%d: match' % i
    else:
        print '%d: no match' % i

(2 つの注意: len() はオブジェクトの長さを検出し、range() は相互利用可能なシーケンスを作成します。質問で len() を使用した場合、Python で range() を使用することをお勧めします。また、%d のものは文字列のフォーマットだけです。)

それ以上のことが必要だと思います。1つには、このことを書いた人がデータを何百もの一意のグローバル変数として保存するのが良い考えだと思ったとしても、実行時に各変数が存在し、データを保持するなどのことを行うことを彼が考えたとは思いません。したがって、この場合、個人的には辞書を使用します。これにより、柔軟性が少し向上します。

各 dict は、キーと値のペアのコレクションです。辞書は順序付けされていないため、それぞれの最初の項目を直接比較することはできません。最初の項目はありません。できることは、整数のシーケンスをキーとして使用し、そのシーケンスの範囲を反復処理することです。また、デフォルトで値を取得するなどのことができるため、c64 が宣言されていない場合でもプログラムがクラッシュすることはありません。

c = {0:'a', 1:'b', 2:'c', 3:'d', 4:'r'}
d = {0:'a', 1:'B', 2:None, 3:'d'}

そして、次のようなもの:

for i in range(len(c)):
    if c.get(i, 'No value') == d.get(i, 'No value'):
        print '%d: match' % i
    else:
        print '%d: no match' % i

c[4]通常、またはのような辞書からデータを取得しますがd['apple']Get() を使用すると、 iの値が欠落している場合にデフォルト値 (「値なし」) を使用できます。

(別の仮定: データの各ペアは実際のデータ関係を表しているため、反復回数は意味的にはインデックスであると同時にラベルでもあります。私の考えでは、キーは通常、値自体ではなくラベルであるべきです。)

コメントで提案したこと、既存の変数をこれらの構造の1つに収集すると、うまく機能します。Notepad++ を開いて、ソースでスマート検索/置換を行うだけで、10 分ほどかかります。c = (c0, c1, c2, etc)またはc = {0:c0, 1:c1, etc}、またはニーズに合った別の構造を見つけた場合は、別のものになります。しかし、私が実際にすべきことは、スクリプト全体をリファクタリングして、比較しているデータが、それが何であるか、どのように使用しているかを反映する何らかのオブジェクトに格納されるようにすることです。Python は、ここで本当の魔法を働かせてくれます: 少し足を踏み入れるだけで、 cdc == dの結合または非結合のセットを見つけたり、特定の反復でデータ値を操作したり、必要なことは何でも のような単純なことを行うことができます。

于 2013-03-13T01:47:16.833 に答える
-1

getattrlocals、および を見てくださいglobals

変数が関数に対してローカルである場合、これが可能です。変数がグローバルである場合は、globals()代わりに使用してください。

for i in len(100):
    first_name = "c{0}".format(i)
    second_name = "d{0}".format(i)
    if(locals()[first_name] == locals()[second_name]):
        print("hello")
于 2013-03-13T00:54:02.347 に答える
-1

eval 関数を使用できます。

for i in xrange(100):
    if eval('c%d' % i) == eval('d%d' % i):
        print "Hello!"
于 2013-03-13T00:58:32.533 に答える