簡體   English   中英

為什么[:] = 1與[:] ='1'根本不同?

[英]Why is a[:]=1 fundamentally different to a[:]='1'?

請考慮兩個代碼片段(注意字符串和整數之間的區別):

a = []
a[:] = '1'

a = []
a[:] = 1

在第一種情況下, a['1'] 在第二個,我得到錯誤TypeError: can only assign an iterable 為什么在這里使用'1'超過1會有根本的不同?

分配給切片需要在右側進行迭代。

'1'是可迭代的,而1則不是。 考慮以下:

In [7]: a=[]

In [8]: a[:]='abc'

結果是:

In [9]: a
Out[9]: ['a', 'b', 'c']

如您所見,列表將字符串的每個字符作為單獨的項目。 這是因為迭代字符串會產生其字符。

如果你想更換一個范圍內的a “s的一個標元素,簡單地包裹在標某種類型的迭代:

In [11]: a[:]=(1,) # single-element tuple

In [12]: a
Out[12]: [1]

這也適用於字符串(假設字符串被視為單個項而不是字符序列):

In [17]: a[:]=('abc',)

In [18]: a
Out[18]: ['abc']

'1'是一個字符串,但它是可迭代的。 它就像一個字符列表。 a[:]='1'用字符串'1'的內容替換列表a的內容。 但是1是整數。

Python不會改變類型。

例:

print bool(1=='1') # --> False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM