0

脳を消耗している質問があります。変数Iがシーケンスを格納し、変数IIが別のシーケンスを格納し、変数IIIも別のシーケンスを格納するとします。変数1は、数値1、次の2、および次の3を表します。次に、これら3つのシーケンスのランダムな文字を持つ別のキー変数があります。その事実を踏まえると、このキー変数の文字を対応する番号に簡単に変換できます。例では、、より、 A OR B OR C = 1であるため、x = 'afh'と言うのと同じです。x = '123'

ここで複雑な部分があります。

キー変数xを数値に変換すると、各文字が個別に、結果からランダムに文字を返すこともできます。例:、、特に。を使用する場合は、、またはx = '123'のようなリストを返すことができます。このことから、私がまだ方法を理解できなかったことは次のとおりです。['a','e','f']['b','d','i']random.choice()

変数I、II、IIIからのすべての可能なバリエーションをリストに追加するにはどうすればよいですか。例えば:

['adg','beh','cfi','aei','ceg',...]

無限にランダムな組み合わせを印刷する方法を知っていますが、この場合、繰り返しが発生するので、それらは必要ありません。I、II、IIIの間で考えられるすべてのバリエーションをリストに追加したいのです。なぜなら、それらを数字に変換すると、対応するシーケンスから任意の文字を返すことができるからです。さて、私の例が自明であることを願っています。ご清聴ありがとうございました!

I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3
x = 'afh' # Random possibility: It could be an input.
L = []
LL = []

for i in range(len(x)):
    if x[i] in I:
        L.append(1)
    if x[i] in II:
        L.append(2)
    if x[i] in III:
        L.append(3)

for i in range(len(L)): # Here lies the mistery...
    if L[i] == 1:
        LL.append(I) 
    if L[i] == 2:
        LL.append(II)
    if L[i] == 3:
        LL.append(III)

print L
print LL

出力は次のとおりです。

[1, 2, 3]

['abc', 'def', 'ghi']
4

3 に答える 3

1

これが私があなたのコードを書き直す方法です。あなたのようなステートメントが大きなコードの臭いである場合は長いです。シーケンスをタプルに入れて、単一のループを使用しました。また、2番目のループをリスト内包に置き換えました。

ちなみに、賢明な人のようにゼロベースのインデックスを使用した場合は、インデックスを単純化することもできます。

I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3
x = 'afh' # Random possibility: It could be an input.
L = []
LL = []

lists = I, II, III

for c in x:
    for i, seq in enumerate(lists):
        if c in seq:
            L.append(i+1)

LL = [lists[i-1] for i in L]

print L
print LL

itertoolsまた、モジュール、特に機能を確認してくださいproduct。正確に何を意味するのかは明確ではありませんが、productは、シーケンスの各リストからのアイテムのすべての組み合わせを提供します。

于 2012-12-28T05:23:46.117 に答える
0

アンチモンさんよろしくお願いします!答えはまさに itertools の product() です。それを含むコードは、はるかに単純です。

from itertools import *

I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3

IV = product(I,II,III)

for i in IV:
    print i

そして、出力はまさに私が望んでいたものであり、可能なすべての組み合わせです:

('a', 'd', 'g')
('a', 'd', 'h')
('a', 'd', 'i')
('a', 'e', 'g')
('a', 'e', 'h')
('a', 'e', 'i')
('a', 'f', 'g')
('a', 'f', 'h')
('a', 'f', 'i')
('b', 'd', 'g')
('b', 'd', 'h')
('b', 'd', 'i')
('b', 'e', 'g')
('b', 'e', 'h')
('b', 'e', 'i')
('b', 'f', 'g')
('b', 'f', 'h')
('b', 'f', 'i')
('c', 'd', 'g')
('c', 'd', 'h')
('c', 'd', 'i')
('c', 'e', 'g')
('c', 'e', 'h')
('c', 'e', 'i')
('c', 'f', 'g')
('c', 'f', 'h')
('c', 'f', 'i')
于 2012-12-28T05:51:21.093 に答える
0
    python 3.2


    [(i,v,c) for i in I for v in II for c in III]
于 2012-12-28T05:58:12.380 に答える