1

Pythonでは、次のようなことができます。

d = dict()
i = int()
f = float()
l = list()

しかし、文字列のコンストラクタはありません

>>> s = string()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'string' is not defined

何故ですか?または、文字列型のコンストラクターはありますか?

また、上記の定義に従って、

d['a'] = 1

動作しますが

>>> l[0] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

ではない。

誰かが私にこれを説明できますか?

4

4 に答える 4

3

あなたが意味したのは:

a = str()

私は信じている。その後、すべてが機能します。

と の違いについてはd['a']l[0]:dは辞書であり、保存されている要素の疎な表現があります。一方、リスト ( l) は密にデータを表します: したがって、次の場合:

l = [1,2]

その後、あなたは次のように書いています。

l[200] = 31

これは、要素 200 への代入だけでなく、完全に一貫していることを意味し、いくつかの任意の値も入れl[3:199]ます。

于 2012-07-09T21:00:39.843 に答える
2

他の人が指摘したように、strではなくが必要ですstring

しかし、あなたの他の質問に答えるために、リストは割り当てによって拡張することはできません。リストの範囲外に代入しようとすると、エラーが発生します。一方、辞書には、意味のある意味での制限はありません。定義済みのキーと未定義のキーのみがあります。

辞書はオブジェクトをまとめたバッグ、リストは固定数のコンパートメントを備えたトレイと考えてください。いつでも一対のものをバッグに入れることができますが、トレイのコンパートメントが存在しない場合は、何かをトレイのコンパートメントに入れることはできません. appendまたは同様のものを使用して、コンパートメントを作成する必要があります。「トレイ」にはまだコンパートメントがないため、l[0] = x失敗します。

于 2012-07-09T21:04:33.617 に答える
1

はい、私たちはstr():

>>> s=str()
>>> s
''
于 2012-07-09T21:00:40.783 に答える
1

文字列作成用の組み込み関数があります。

s = str()  # s == ''

リストへの割り当てと辞書への割り当てに関する限り:

辞書は順序付けされていないため、いつでもどこでもキーと値のペアを追加できることは完全に理にかなっています。実際、辞書のキーは同じ型 ( ) である必要さえありませんd[1]='foo'; d["string"]='bar'。ただし、リストは順序付けされています。次の点を考慮してください。

a=list()
a[1]='foo'

そのシナリオで言語は何をすべきでしょうか? a[0]はまだ定義されていないため、言語はリストの順序付けを維持するために何かを作成するか、エラーをスローする必要があります。a[0]またはシーケンス内の次の要素 (たとえば)への代入a=list(); a[0]='bar'は非常に特殊なケースであり、「Zen of Python」を読むと、特殊なケースはルールを破るほど特別ではありません。これが、リスト要素に代入する前に Guido が強制的にリスト要素を存在させることにした理由だと思います (例: a=list(); a.append('foo'); a[0]='bar')

于 2012-07-09T21:06:08.507 に答える