3

タイトルが示すように、いくつかのコマンド ライン オプションを処理して、次のlistようにユーザー入力からを作成しています"3,28,2"。これは私がこれまでに得たものです:

>>> rR = "3,28,2"
>>> rR = re.split(r"[\W]+", rR)
>>> map(int, xrange( int(rR[0]),int(rR[1]),int(rR[2]) ))
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]
>>>

参考までに、これre.split()は、ユーザーがカンマ (,) またはスペース、あるいはその両方を区切り文字として同時に使用できるためです。

私の質問はxrange(object)、ユーザー入力が開始値とステップ値の有無にかかわらずできるように、ビットを「自動化」する方法です(つまり、「3,28,2」対「3,28」対「28」)。len(rR)入力内の要素の数を教えてくれますが、その情報を使用して xrange/range 部分を動的に書き込む方法について、ここでちょっと迷っています。

何か案は)?また、コードをできるだけ効率的にしようとしています。したがって、それに関するアドバイスは大歓迎です。乾杯!!

4

3 に答える 3

6

これを試して:

>>> rR = "3,28,2"
>>> rR = re.split(r"[\W]+", rR)
>>> map(int, xrange(*map(int, rR)))
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]
>>>

* は要素を xrange の引数にアンパックします。

于 2013-05-15T12:09:37.087 に答える
2
In [46]: import re

In [47]: rR = "3,28,2"

In [48]: range(*map(int, re.split(r"\W+", rR)))
Out[48]: [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]

参考文献:

于 2013-05-15T12:33:40.380 に答える
1

私は (list|generator) 内包表記を好みmapます。一般的に、それらはより「pythonic」と見なされていると思います。

>>> rR = "3,28,2"
>>> range(*(int(x) for x in re.split(r"[\W]+", rR)))
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]
于 2013-05-15T12:12:21.013 に答える