2012-12-04 28 views

Trả lời

287

Có, thứ tự của các phần tử trong danh sách python là liên tục.

+10

Đây là câu trả lời đúng vì vậy tôi không muốn thêm khác. Ông cũng có thể sử dụng list.append để thực sự đặt tâm trí của mình thoải mái. http://docs.python.org/2/tutorial/datastructures.html –

+0

điều gì sẽ xảy ra nếu tôi trả về danh sách cục bộ từ một hàm và sử dụng chức năng đó trong chức năng gọi. Đó là 'def fn_1(): lst = [] lst.append (1) lst.append (2) trả về lst' và' def fn_2(): print (fn_1()) 'Lệnh sẽ giống nhau không, bất kể cách nhiều lần hoặc bao giờ tôi sử dụng fn_1()? – MANU

+1

Có, thứ tự của các phần tử trong danh sách python là liên tục. ;) – sge

55

Tóm lại, có, thứ tự được giữ nguyên. Trong dài:

Nói chung các định nghĩa sau đây sẽ luôn áp dụng đối với đối tượng như danh sách:

Một danh sách là một tập hợp các yếu tố mà có thể chứa các thành phần trùng lặp và có một trật tự xác định rằng nhìn chung không thay đổi trừ khi rõ ràng đã làm như vậy. ngăn xếphàng đợi là cả hai loại danh sách cung cấp hành vi cụ thể (thường bị giới hạn) để thêm và loại bỏ các phần tử (ngăn xếp là LIFO, hàng đợi là FIFO). Danh sách là đại diện thực tế của, tốt, danh sách các sự vật. Một chuỗi có thể được coi như một danh sách các ký tự, vì thứ tự quan trọng ("abc" != "bca") và các bản sao trong nội dung của chuỗi được cho phép ("aaa" có thể tồn tại và != "a").

A đặt là tập hợp các phần tử không thể chứa các bản sao và có thứ tự không xác định có thể có hoặc không thay đổi theo thời gian. Bộ không đại diện cho danh sách các thứ quá nhiều khi chúng mô tả mức độ của một số lựa chọn nhất định. Cấu trúc bên trong của bộ, làm thế nào các yếu tố của nó được lưu trữ tương đối với nhau, thường không có nghĩa là để truyền đạt thông tin hữu ích. Trong một số triển khai, các bộ luôn được sắp xếp nội bộ; ở những người khác, thứ tự chỉ đơn giản là không xác định (thường phụ thuộc vào hàm băm).

Bộ sưu tập là một thuật ngữ chung đề cập đến bất kỳ đối tượng nào được sử dụng để lưu trữ một số (thường biến) của các đối tượng khác. Cả hai danh sách và bộ là một loại bộ sưu tập. Tuples và mảng thường không được coi là bộ sưu tập. Một số ngôn ngữ xem xét bản đồ (các vùng chứa mô tả liên kết giữa các đối tượng khác nhau) cũng là một loại bộ sưu tập.

Lược đồ đặt tên này đúng với tất cả các ngôn ngữ lập trình mà tôi biết, bao gồm Python, C++, Java, C# và Lisp (trong đó danh sách không giữ thứ tự của chúng sẽ đặc biệt thảm khốc). Nếu bất cứ ai biết về bất kỳ nơi này không phải là trường hợp, xin vui lòng chỉ nói như vậy và tôi sẽ chỉnh sửa câu trả lời của tôi. Lưu ý rằng việc triển khai cụ thể có thể sử dụng tên khác cho các đối tượng này, chẳng hạn như vectơ trong C++ và flex trong ALGOL 68 (cả hai danh sách; flex về mặt kỹ thuật chỉ là một mảng có kích thước lớn).

Nếu có bất kỳ sự nhầm lẫn trái trong trường hợp của bạn do các chi tiết cụ thể về cách thức dấu + làm việc ở đây, chỉ biết rằng trật tự là quan trọng cho các danh sách và trừ khi có lý do rất tốt để tin rằng nếu không bạn có thể khá nhiều luôn một cách an toàn giả định rằng các hoạt động danh sách duy trì trật tự. Trong trường hợp này, ký hiệu + hoạt động giống như các chuỗi ký tự (thực ra chỉ là danh sách các ký tự): nó lấy nội dung của một danh sách và đặt nó đằng sau nội dung của một danh sách khác.

Nếu chúng ta có

list1 = [0, 1, 2, 3, 4] 
list2 = [5, 6, 7, 8, 9] 

Sau đó

list1 + list2 

là giống như

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9] 

nào để đánh giá

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Giống như

"abdcde" + "fghijk" 

Tạo

"abdcdefghijk" 
+0

Tôi đã đọc ở đâu đó vì đặc tả của mảng JSON không chỉ định rằng mảng duy trì hoạt động mảng đơn hàng không được bảo đảm để duy trì trật tự. Tuy nhiên, tôi không thể tìm ra nguồn gốc cho điều đó. Và cấu trúc bên dưới của Mảng vẫn là trường hợp đặc biệt của một đối tượng có chỉ mục đánh số, vì vậy nó không mâu thuẫn với tuyên bố của bạn, chỉ là một miếng ngon thú vị, tôi nghĩ. – Multihunter

+0

Tôi không đồng ý với việc giải thích tập hợp. Các bộ chắc chắn không "hướng tới mục đích toán học và lý thuyết hơn so với các mục đích thực tế". Thay vào đó, tập hợp rất hữu ích bất kỳ lúc nào, cần một bộ sưu tập chứa các mục không thể lặp lại và cung cấp các công cụ như sự khác biệt và giao lộ hữu ích trong việc mô hình hóa các trường hợp sử dụng thực tế. – Pintun

+1

@Pintun nhìn lại vài năm sau khi viết bài này tôi đồng ý với bạn. Tôi sẽ chỉnh sửa khi tôi tìm ra cách tốt hơn để thể hiện những gì tôi đang nhắm đến. – ApproachingDarknessFish

3

Tôi cho rằng có một điều mà có thể liên quan đến bạn là có hay không các mục có thể thay đổi, do đó 2 trở thành một số khác nhau, ví dụ. Bạn có thể đặt tâm trí của bạn thoải mái ở đây, bởi vì trong Python, số nguyên là bất biến, có nghĩa là chúng không thể thay đổi sau khi chúng được tạo.

Không phải mọi thứ trong Python đều không thay đổi. Ví dụ: danh sách có thể thay đổi --- chúng có thể thay đổi sau khi được tạo. Vì vậy, ví dụ, nếu bạn đã có một danh sách liệt kê

>>> a = [[1], [2], [3]] 
>>> a[0].append(7) 
>>> a 
[[1, 7], [2], [3]] 

Ở đây, tôi đã thay đổi mục đầu tiên của a (tôi đã thêm 7 với nó). Người ta có thể tưởng tượng xáo trộn mọi thứ ở đây nếu bạn không cẩn thận (và thực sự, điều này xảy ra với mọi người khi họ bắt đầu lập trình bằng Python theo cách này hay cách khác, chỉ cần tìm kiếm trang này nó "để xem hàng chục ví dụ).

Cũng đáng để chỉ ra rằng x = x + [a]x.append(a) không giống nhau. Cái thứ hai thay đổi x và cái đầu tiên tạo một danh sách mới và gán nó cho x. Để thấy sự khác biệt, hãy thử đặt y = x trước khi thêm bất kỳ thứ gì vào x và thử từng cái một và xem sự khác biệt mà hai cái tạo thành y.

0

alist = [1,2,3]

i = 0

for item in aList: 

    if i<2: 

      aList.remove(item) 

    i+=1 

alist

[2]

Các đạo đức là khi sửa đổi một danh sách trong một vòng lặp điều khiển theo danh sách, có hai bước:

aList=[1,2,3] 
i=0 
for item in aList: 
    if i<2: 
     aList[i]="del" 
    i+=1 

aList 

['del', 'del', 3] 
for i in range(2): 
    del aList[0] 

aList 
[3] 
4

Bạn đang bối rối 'bộ' và 'danh sách'. Một bộ không đảm bảo trật tự, nhưng các danh sách thì có.

Bộ được khai báo sử dụng dấu ngoặc nhọn: {}. Ngược lại, danh sách được khai báo bằng dấu ngoặc vuông: [].

mySet = {a, b, c, c} 

Không đảm bảo trật tự, nhưng danh sách thực hiện:

myList = [a, b, c] 
+1

Lưu ý rằng một bộ * cũng * đảm bảo không trùng lặp. Một danh sách có thể có các phần tử trùng lặp, một bộ có thể không. –

0

Có danh sách và các bộ luôn ra lệnh trong khi các từ điển không

Các vấn đề liên quan