Một danh sách có thể chứa bất kỳ đối tượng sắp xếp nào, thậm chí một danh sách khác [danh sách con], do đó có thể chứa chính danh sách con, v.v. Đây được gọi là danh sách lồng nhau
Bạn có thể sử dụng chúng để sắp xếp dữ liệu thành các cấu trúc phân cấp
Tạo một danh sách lồng nhau
Danh sách lồng nhau được tạo bằng cách đặt một chuỗi danh sách con được phân tách bằng dấu phẩy
L = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
Truy cập các mục danh sách lồng nhau theo chỉ mục
Bạn có thể truy cập các mục riêng lẻ trong danh sách lồng nhau bằng nhiều chỉ mục
Các chỉ mục cho các mục trong danh sách lồng nhau được minh họa như bên dưới
L = ['a', 'b', ['cc', 'dd', ['eee', 'fff']], 'g', 'h']
print[L[2]]
# Prints ['cc', 'dd', ['eee', 'fff']]
print[L[2][2]]
# Prints ['eee', 'fff']
print[L[2][2][0]]
# Prints eee
Lập chỉ mục danh sách phủ định trong danh sách lồng nhau
Bạn cũng có thể truy cập danh sách lồng nhau bằng cách lập chỉ mục phủ định
Chỉ số phủ định đếm ngược từ cuối danh sách. Vì vậy,
L = ['a', 'b', ['cc', 'dd', ['eee', 'fff']], 'g', 'h']
print[L[2]]
# Prints ['cc', 'dd', ['eee', 'fff']]
print[L[2][2]]
# Prints ['eee', 'fff']
print[L[2][2][0]]
# Prints eee
2 là mục cuối cùng, L = ['a', 'b', ['cc', 'dd', ['eee', 'fff']], 'g', 'h']
print[L[2]]
# Prints ['cc', 'dd', ['eee', 'fff']]
print[L[2][2]]
# Prints ['eee', 'fff']
print[L[2][2][0]]
# Prints eee
3 là mục cuối cùng thứ hai, v.v.Các chỉ mục phủ định cho các mục trong danh sách lồng nhau được minh họa như bên dưới
L = ['a', 'b', ['cc', 'dd', ['eee', 'fff']], 'g', 'h']
print[L[-3]]
# Prints ['cc', 'dd', ['eee', 'fff']]
print[L[-3][-1]]
# Prints ['eee', 'fff']
print[L[-3][-1][-2]]
# Prints eee
Thay đổi giá trị mục danh sách lồng nhau
Bạn có thể thay đổi giá trị của một mục cụ thể trong danh sách lồng nhau bằng cách tham khảo số chỉ mục của nó
L = ['a', ['bb', 'cc'], 'd']
L[1][1] = 0
print[L]
# Prints ['a', ['bb', 0], 'd']
Thêm các mục vào danh sách Lồng nhau
Để thêm các giá trị mới vào cuối danh sách lồng nhau, hãy sử dụng phương thức append[]
L = ['a', ['bb', 'cc'], 'd']
L[1].append['xx']
print[L]
# Prints ['a', ['bb', 'cc', 'xx'], 'd']
Khi bạn muốn chèn một mục vào một vị trí cụ thể trong danh sách lồng nhau, hãy sử dụng phương thức insert[]
L = ['a', ['bb', 'cc'], 'd']
L[1].insert[0,'xx']
print[L]
# Prints ['a', ['xx', 'bb', 'cc'], 'd']
Bạn có thể hợp nhất một danh sách vào một danh sách khác bằng cách sử dụng phương thức mở rộng[]
________số 8_______
Xóa các mục khỏi Danh sách lồng nhau
Nếu bạn biết chỉ mục của mục bạn muốn, bạn có thể sử dụng phương thức pop[]. Nó sửa đổi danh sách và trả lại mục đã xóa
Trong bài học này, bạn sẽ khám phá cách danh sách có thể được lồng vào nhau. Bạn đã thấy rằng một phần tử trong danh sách có thể là bất kỳ loại đối tượng nào. Điều đó bao gồm một danh sách khác. Một danh sách có thể chứa các danh sách con, do đó có thể chứa chính các danh sách con, v.v. với độ sâu tùy ý
>>>
>>> x = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j']
>>> x
['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j']
>>> x[0]
'a'
>>> print[x[0], x[2], x[4]]
a g j
>>> x[1]
['bb', ['ccc', 'ddd'], 'ee', 'ff']
>>> x[1][0]
'bb'
>>> x[1][1]
['ccc', 'ddd']
>>> x[1][2]
'ee'
>>> x[1][1][1]
'ddd'
>>> x[3][0]
'hh'
>>> x[-2][-1]
'ii'
>>> x[-4][-3][-2]
'ccc'
>>> x
['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j']
>>> len[x]
5
>>> 'ddd' in x
False
>>> 'ddd' in x[1]
False
>>> 'ddd' in x[1][1]
True
km trên
Xin chào Ngài, một số trường hợp sử dụng tốt của NESTED LISTS là gì?
Chris Bailey Nhóm RP trên
Xin chào km. Trường hợp tốt nhất tôi có thể nghĩ đến là một Ma trận hoặc một mảng, giống như một bảng tính. Nơi bạn có thể có các cột và hàng dữ liệu. Nó có thể trông giống như 4
4 trong đó hàng đầu tiên là tên thành phố, tiếp theo là dữ liệu nhiệt độ của các thành phố đó trên 3 hàng nữa. Có một vài gói Python chuyên làm việc với loại dữ liệu này, Numpy và Pandas sử dụng Numpy
km trên
Cảm ơn Chris nhiều, để mình thử
koellingh trên
Tôi tò mò liệu các hàm min[] và max[] có hỗ trợ cả int và float trong cùng một danh sách không. xung lực ban đầu của tôi là nó sẽ không, nhưng nó đã hoạt động. Số float có giá trị ascii không?
Chris Bailey Nhóm RP trên
Xin chào @koellingh, tôi nghĩ câu hỏi này phần nào dựa trên bài học trước, với 4
5 và 4
6. Số float và số nguyên có thể được so sánh bằng cách sử dụng min và max, do cách Python xử lý các số. “Python hỗ trợ đầy đủ số học hỗn hợp. khi một toán tử số học nhị phân có các toán hạng thuộc các kiểu số khác nhau, thì toán hạng có loại "hẹp hơn" được mở rộng sang toán hạng kia, trong đó số nguyên hẹp hơn dấu phẩy động, hẹp hơn phức hợp. So sánh giữa các số thuộc các loại khác nhau hoạt động như thể các giá trị chính xác của các số đó đang được so sánh. ”
Trong trường hợp so sánh các ký tự ASCII riêng lẻ bằng cách sử dụng 4
6 và 4
5, các hàm đó đang sử dụng giá trị thứ tự/ASCII
Nếu bạn cố gắng so sánh hỗn hợp các ký tự hoặc chuỗi với số bằng các hàm đó, bạn sẽ gặp Lỗi. `TypeError. '>' không được hỗ trợ giữa các phiên bản của 'int' và 'str'
koellingh trên
À, cái đó rất hữu ích. tôi hiểu điều này bây giờ. Nếu int được coi là giá trị ascii, thì sẽ không có lỗi khi hàm min[] hoặc max[] chạy trên danh sách có cả int và chuỗi. Lỗi là do nó đang coi int là thứ tự và chuỗi là giá trị ascii và không thể so sánh thứ tự và chuỗi với nhau. Và ints và float đều là thứ tự
DoubleA trên
Xin chào Chris. Cảm ơn cho một hướng dẫn rõ ràng như vậy. Tôi đang học hỏi rất nhiều từ các bạn. Chơi với danh sách Bây giờ tôi có một cái gì đó để thêm vào mà có lẽ đáng được đề cập ở đây. Đây là đoạn mã của tôi
import copy
my_list = ['a', ['b', 'c', ['d', 'e', 'f'], 'g', 'h'], 'j', 'i', ['m', ['k', 'l'], 'n']]
deep_copy = copy.deepcopy[my_list]
shallow_copy = my_list.copy[]
my_list[1][2][0] = '_d_' # I assign a different value to the chosen element of my_list
print[shallow_copy] # the element [1][2][0] of the shallow_copy list has also been affected!
print[deep_copy] # the element [1][2][0] of the deep_copy list has not been affected!
# Copying my_list using the list[] function and the slice [:] operator crates also a shallow copy of my_list
my_second_list = list[my_list]
my_third_list = my_list[:]
my_list[1][2][1] = '_e_'
print[my_second_list] # the element of my_second_list[1][2][1] has also been affected
print[my_third_list] # the element of my_third_list[1][2][1] has also been affected
Người ta có thể kết luận rằng cần lưu ý rằng việc “sao chép” đơn giản danh sách lồng nhau không lan truyền đến các phần tử lồng nhau của bản sao. Tôi nghĩ rằng, có một sự song song với toán tử “in”, như đã được chứng minh, không “thấy” các phần tử lồng nhau và coi chúng là danh sách độc lập hoặc danh sách riêng biệt. Sao chép danh sách lồng nhau bằng các công cụ khác với phương pháp 4
9 tạo ra các bản sao nông của danh sách gốc và mọi thay đổi đối với danh sách "cha mẹ" cũng sẽ được phản ánh trong các bản sao tiếp theo