2012-01-28 42 views
37

Vui lòng xem xét hai đoạn mã (chú ý sự khác biệt giữa chuỗi và số nguyên):Tại sao [:] = 1 về cơ bản khác với [:] = '1'?

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

a = [] 
a[:] = 1 

Trong trường hợp đầu tiên a['1']. Trong lần thứ hai, tôi nhận được lỗi TypeError: can only assign an iterable. Tại sao sử dụng '1' trên 1 về cơ bản thì khác ở đây?

+2

Do có dấu ngoặc kép có ý nghĩa gì đối với bạn? Bạn có thể bao gồm các từ "Chuỗi" và "Số nguyên" trong câu hỏi của bạn để làm rõ sự khác biệt giữa ''1'' và' 1' không? –

Trả lời

79

Gán cho một lát yêu cầu có thể lặp lại ở phía bên tay phải.

'1' có thể lặp lại, trong khi 1 thì không. Hãy xem xét những điều sau đây:

In [7]: a=[] 

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

Kết quả là:

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

Như bạn có thể thấy, danh sách được mỗi nhân vật của chuỗi thành một mục riêng. Đây là hệ quả của việc lặp lại trên một chuỗi mang lại các ký tự của nó.

Nếu bạn muốn thay thế một loạt các yếu tố a 's với một vô hướng duy nhất, chỉ đơn giản là quấn vô hướng trong một iterable của một số loại:

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

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

này cũng áp dụng cho chuỗi (được cung cấp chuỗi là được coi là một mục duy nhất và không phải là một chuỗi ký tự):

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

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

Bạn cũng có thể bỏ qua các dấu ngoặc: 'a [:] = 1,' hoạt động tốt. Mặc dù nó là ít tiết tôi đoán. – TyrantWave

+0

@TyrantWave Tôi nghĩ rằng bạn có nghĩa là * parens *, không phải dấu ngoặc đơn. Và đối với những người dùng khác, parens không phải là các nhà xây dựng tuple, dấu phẩy là. Xem http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#more-about-tuples – Edwin

+0

Điều tương tự khác: P – TyrantWave

2

'1' là một chuỗi, nhưng có thể lặp lại được. Nó giống như một danh sách các nhân vật. a[:]='1' thay thế nội dung của danh sách a bằng nội dung của chuỗi '1'. Nhưng 1 là một số nguyên.

Python không thay đổi loại.

Ví dụ:

print bool(1=='1') # --> False 
Các vấn đề liên quan