0

私はPythonに比較的慣れていないので、いくつかの一般的な機能を理解しようとしています.

0 から 100 までの数値のすべての整数平方根を取得する簡単なスクリプトを作成しようとしました。これが私が思いついたものです。

mylist = [n for n*n in xrange(0,101)]

実行したときに SyntaxError が発生しましたが、私が知る限り、「n for n*n in」ビットが好きではありません。これは不可能だと推測するのは正しいですか?これを達成する方法はありますか、それとも sqrt() 関数が必要ですか?

ありがとう

4

3 に答える 3

4

このようなものが必要math.sqrtです。

mylist = [math.sqrt(n) for n in xrange(0,101)]

Python は、それを見n*n = somethingて推測できるほど賢くありませんn = math.sqrt(something)。それは良いことでもありますn = -math.sqrt(something)

または、ビルトインを試すこともできますmap

mylist = map(math.sqrt,xrange(0,101))

最近はリスト内包表記を好む人がほとんどですが。

場合によっては、これらをもう少しうまくジェネレーター式に書き直すことができます。

def square_less_than(n):
    i = 0
    while True:
       if i*i < n:
          yield i
          i += 1
       else:
          break

print list(square_less_than(10))

itertoolsまたは、標準ライブラリの優れたモジュールを使用した同等のワンライナー:

import itertools
print list(itertools.takewhile(lambda i:i*i < 10,itertools.count()))
于 2013-02-08T16:07:32.633 に答える
1

あなたも試すことができます:

mylist = [n*n for n in xrange(0,101)]
于 2013-02-08T16:43:19.003 に答える
1

リスト内包表記の構文が正しくありません。次のように書くことができます:

import math
mylist = [math.sqrt(n) for n in xrange(0, 101)]
于 2013-02-08T16:08:23.067 に答える