2012-05-10 4 views
0

私はPythonの初心者です。 リストに10個の要素を入力したいと思います。 以下のプログラムは、各リストに10個の要素を追加します。 しかし、以下のプログラムはリストに11個のオブジェクトを印刷します。なぜですか? 私はhttp://www.learnpython.org/page/Basic%20Operatorsからこのプログラムを得ました。 私はx = object()を知りたかったのですが、それはどういう意味ですか?なぜリストにはn個以上の要素が含まれていますか?

x = object() 
y = object() 
i = 0 
# change this code 
x_list = [x] 
y_list = [y] 
while(i < 10): 
    x_list.append((10)) 
    y_list.append(11) 
    i = i + 1 
#x_list = [x] 
#y_list = [y] 
big_list = x_list + y_list 

print "x_list contains %d objects" % len(x_list) # prints 11 objects, #Why? 
print "y_list contains %d objects" % len(y_list) # prints 11 objects, #Why? 
print "big_list contains %d objects" % len(big_list) 
print x_list.count(10) 
print y_list.count(11) 
    print big_list.count(10) 
# testing code 
if x_list.count(x) == 10 and y_list.count(y) == 10: 
    print "Almost there..." 
if big_list.count(x) == 10 and big_list.count(y) == 10: 
    print "Great!" 
+1

ヒント:この演習では、ループではなく、 '*'と '+ '演算子を使用します。 –

+0

@ lazy:私はその点を理解しました。助けてくれてありがとう。しかし、もし私がループを使用するかどうか知りたかったのは何か問題です。私の目標を達成することはできません –

答えて

3

learnpython.org basic operators pageには、リストを含むさまざまなコンテキストで算術演算子を使用する例がいくつかあります。すぐにそのページにチュートリアルを読みに基づいて、おそらくページ作成者が後だったという答えは次のようになります。

10×持つリスト作成します
x_list = [x] * 10 
y_list = [y] * 10 
big_list = x_list + y_list 

:それには秒。

これを行うにはループを使用していましたが、これははるかに柔軟な方法です。ループを使用してリストを埋めるためのより無邪気な方法は、例えば次のようになります。リストの内包表記を使用する:

x_list = [x for i in xrange(10)] 

forループを使用し、その後、あなたは、インデックスを追跡する必要はありません。自分自身:プログラムの下

for i in xrange(10): 
    x_list.append(x) 
0

x_listはXプラス10回= 11 10 ...

y_listが含まれている - 同じ。

と入力すると、x_list = [x]と入力すると、リストはxのリストとして初期化されます。

4

x_list = [x] => 1オブジェクトです。 while(i < 10): x_list.append((10)) => 10個のオブジェクト(0〜9) したがって、11は完全に正常です。 x_list = [](空のリスト)は、この最初の要素を持たないように設定する必要があります。

1

object()は、クラスobjectの新しいインスタンスを生成するだけです。最初にこの要素をx_listに挿入し、さらに10個の要素を追加します。

3

は、それぞれに10個の要素を追加しますリスト。しかし、プログラムの下にリストに11個のオブジェクトが印刷される理由は?

追加を開始する前にリストに1つの要素が含まれていたため、リスト[x]には、1要素、xが含まれています。 1 + 10 = 11.

私はx = object()を知りたがっていますが、それはどういう意味ですか?

正確には、「xはobjectを呼び出す結果の名前になります」という意味です。 objectはクラスなので、それを呼び出すとインスタンスが作成されます。 objectインスタンスはまさにそのようなものです。オブジェクトだけで、面白いものはありません。

+0

ありがとうたくさん... –

関連する問題