3

各要素がスペースで区切られたn要素の長さが必要だとします。さらに、i 番目の要素を a1にし、残りをa にする必要があり0ます。これを行う最も簡単なpythonicの方法は何ですか?

したがって、もしn = 10、そしてi = 2、私が望むだろう 0 1 0 0 0 0 0 0 0 0

C ++で取得できるaのようなものが欲しいnew string[]のですが、Pythonバージョンは私を避けています。

ありがとう!

4

5 に答える 5

6

リストを使用します。

n = 10
i = 2

mylist = ["0"] * n
mylist[i-1] = "1"
print " ".join(mylist)
于 2012-05-08T22:57:36.620 に答える
2

次のPythonジェネレータ式は、探しているものを生成するはずです。

" ".join("1" if i == (x+1) else "0" for x in range(n))
于 2012-05-08T23:04:31.267 に答える
1

Python REPL からの次の例が役に立ちます。Python ジェネレーター式" ".join(bin((1<<n)+(1<<n>>i))[3:])が解決策になるはずです。

>>> n=10
>>> i=2
>>> " ".join(bin((1<<n)+(1<<n>>i))[3:])
'0 1 0 0 0 0 0 0 0 0'
于 2012-05-08T23:16:42.837 に答える
0

これは宿題のように見えるので、Pythonではなく英語で答えを説明します。

リスト内包表記を使用して文字列のリストを作成し、(アイテムのインデックスが)および(それ以外の場合)のnいずれかから各要素を選択します。リストの要素をスペースで結合します。'1'i'0'

ブール値に基づいて2つのアイテムから選択する方法はいくつかあります。それらの1つは、シーケンスに2つの項目を持ち、ブール値でシーケンスにインデックスを付けることです。したがって、の場合は最初の要素Falseを、。の場合は2番目の要素を選択しますTrue。この特定のケースでは、ブール値をいくつかの方法に、'0'または'1'いくつかの方法で変換することもできます(たとえば、整数に変換してから文字列に変換します)。

new string[]コメントがわかりません。これはC++構文ではありません。

編集

Pythonは次のとおりです。

' '.join([('0', '1')[x == i - 1] for x in range(n)])

また

' '.join([str(int(x == i - 1)) for x in range(n)])

私は前者がもっと好きです-それが0と1を生成することは非常に明白であり、それらは簡単に他のものに変更することができます。1ベースと0ベースになるように調整するのではありませi - 1ん。通常、私はそれをしません。すべてが同じであれば、入力形式と出力形式で1ベースの値が必要な場合を除いて、全体を通してゼロベースのインデックスを使用することを好みます。その場合、私は入力をできるだけ早く変換し、出力をできるだけ遅くし、コードの同じビットに2つを混在させないようにします。iix

角かっこを安全にドロップして、リスト内包をジェネレーター内包に変えることができます。ほとんどの意図と目的のために、それらは同じように機能します。

于 2012-05-08T23:05:43.953 に答える
0

文字列を結合するには、「+」を使用するだけです。

("0 "*i + "1 " + "0 "*(n-i-1))[:-1]

または、bytearrayを使用することもできます。

a = bytearray(("0 "*n)[:-1])
a[i*2] = "1"
print str(a)
于 2012-05-08T23:07:42.387 に答える