Python nối nhiều mục vào mảng

Giống như vòng lặp

1
3
5
7
5 là cách để thực hiện các thao tác nhiều lần, danh sách là cách để lưu trữ nhiều giá trị. Không giống như mảng NumPy, danh sách được tích hợp vào ngôn ngữ [vì vậy chúng tôi không phải tải thư viện để sử dụng chúng]. Chúng tôi tạo một danh sách bằng cách đặt các giá trị bên trong dấu ngoặc vuông và phân tách các giá trị bằng dấu phẩy

odds = [1, 3, 5, 7]
print['odds are:', odds]

odds are: [1, 3, 5, 7]

Chúng tôi chọn các yếu tố riêng lẻ từ danh sách bằng cách lập chỉ mục cho chúng

print['first and last:', odds[0], odds[-1]]

first and last: 1 7

và nếu chúng ta lặp qua một danh sách, biến vòng lặp sẽ được gán lần lượt từng phần tử

for number in odds:
    print[number]

1
3
5
7

Có một sự khác biệt quan trọng giữa danh sách và chuỗi. chúng ta có thể thay đổi các giá trị trong một danh sách, nhưng chúng ta không thể thay đổi các ký tự riêng lẻ trong một chuỗi. Ví dụ

names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
print['names is originally:', names]
names[1] = 'Darwin'  # correct the name
print['final value of names:', names]

________số 8

hoạt động, nhưng

name = 'Darwin'
name[0] = 'd'

odds = [1, 3, 5, 7]
print['odds are:', odds]
0

không làm

Ch-Ch-Ch-Ch-Thay đổi

Dữ liệu có thể sửa đổi tại chỗ được gọi là có thể thay đổi, trong khi dữ liệu không thể sửa đổi được gọi là bất biến. Chuỗi và số là bất biến. Điều này không có nghĩa là các biến có giá trị chuỗi hoặc số là hằng số, mà khi chúng ta muốn thay đổi giá trị của một biến chuỗi hoặc số, chúng ta chỉ có thể thay thế giá trị cũ bằng một giá trị hoàn toàn mới.

Mặt khác, danh sách và mảng có thể thay đổi. chúng ta có thể sửa đổi chúng sau khi chúng được tạo. Chúng ta có thể thay đổi các phần tử riêng lẻ, thêm các phần tử mới hoặc sắp xếp lại toàn bộ danh sách. Đối với một số thao tác, chẳng hạn như sắp xếp, chúng ta có thể chọn sử dụng hàm sửa đổi dữ liệu tại chỗ hay hàm trả về bản sao đã sửa đổi và giữ nguyên bản gốc

Hãy cẩn thận khi sửa đổi dữ liệu tại chỗ. Nếu hai biến tham chiếu đến cùng một danh sách và bạn sửa đổi giá trị danh sách, nó sẽ thay đổi cho cả hai biến

odds are: [1, 3, 5, 7]
0

odds are: [1, 3, 5, 7]
1

Nếu bạn muốn các biến có giá trị có thể thay đổi độc lập với nhau, bạn phải tạo một bản sao của giá trị khi gán nó

odds are: [1, 3, 5, 7]
2

odds are: [1, 3, 5, 7]
3

Vì những cạm bẫy như thế này, mã sửa đổi dữ liệu tại chỗ có thể khó hiểu hơn. Tuy nhiên, việc sửa đổi cấu trúc dữ liệu lớn tại chỗ thường hiệu quả hơn nhiều so với việc tạo một bản sao đã sửa đổi cho mọi thay đổi nhỏ. Bạn nên xem xét cả hai khía cạnh này khi viết mã của mình

Danh sách lồng nhau

Vì danh sách có thể chứa bất kỳ biến Python nào, nên nó thậm chí có thể chứa các danh sách khác

Ví dụ: chúng ta có thể trưng bày các sản phẩm trên kệ của một cửa hàng tạp hóa nhỏ

odds are: [1, 3, 5, 7]
4

Dưới đây là một ví dụ trực quan về cách lập chỉ mục danh sách các danh sách

1
3
5
7
6 hoạt động

Sử dụng danh sách đã khai báo trước đó

1
3
5
7
6, đây sẽ là kết quả của các hoạt động chỉ mục được hiển thị trong hình ảnh

odds are: [1, 3, 5, 7]
5

odds are: [1, 3, 5, 7]
6

odds are: [1, 3, 5, 7]
7

odds are: [1, 3, 5, 7]
8

odds are: [1, 3, 5, 7]
9

print['first and last:', odds[0], odds[-1]]
0

Cảm ơn Hadley Wickham cho hình ảnh trên

Danh sách không đồng nhất

Danh sách trong Python có thể chứa các phần tử thuộc các loại khác nhau. Thí dụ

print['first and last:', odds[0], odds[-1]]
1

Có nhiều cách để thay đổi nội dung của danh sách ngoài việc gán giá trị mới cho các phần tử riêng lẻ

print['first and last:', odds[0], odds[-1]]
2

print['first and last:', odds[0], odds[-1]]
3

print['first and last:', odds[0], odds[-1]]
4

print['first and last:', odds[0], odds[-1]]
5

print['first and last:', odds[0], odds[-1]]
6

print['first and last:', odds[0], odds[-1]]
7

Trong khi sửa đổi tại chỗ, thật hữu ích khi nhớ rằng Python xử lý các danh sách theo cách hơi phản trực giác

Nếu chúng tôi tạo một danh sách và [cố gắng] sao chép nó rồi sửa đổi tại chỗ, chúng tôi có thể gây ra đủ loại rắc rối

print['first and last:', odds[0], odds[-1]]
8

print['first and last:', odds[0], odds[-1]]
9

Điều này là do Python lưu trữ một danh sách trong bộ nhớ và sau đó có thể sử dụng nhiều tên để chỉ cùng một danh sách. Nếu tất cả những gì chúng ta muốn làm là sao chép một danh sách [đơn giản], chúng ta có thể sử dụng hàm

1
3
5
7
8, vì vậy chúng ta không sửa đổi danh sách mà chúng ta không cố ý

first and last: 1 7
0

first and last: 1 7
1

Điều này khác với cách các biến hoạt động trong bài 1 và giống với cách hoạt động của một bảng tính hơn

Biến một chuỗi thành một danh sách

Sử dụng vòng lặp for để chuyển chuỗi “hello” thành một danh sách các chữ cái

first and last: 1 7
2

Dấu. Bạn có thể tạo một danh sách trống như thế này

first and last: 1 7
3

Dung dịch

first and last: 1 7
4

Có thể truy cập tập hợp con của danh sách và chuỗi bằng cách chỉ định phạm vi giá trị trong ngoặc, tương tự như cách chúng tôi truy cập phạm vi vị trí trong mảng NumPy. Điều này thường được gọi là "cắt" danh sách/chuỗi

first and last: 1 7
5

first and last: 1 7
6

Cắt từ cuối

Sử dụng cắt để chỉ truy cập bốn ký tự cuối cùng của một chuỗi hoặc các mục của danh sách

first and last: 1 7
7

first and last: 1 7
8

Liệu giải pháp của bạn có hoạt động bất kể bạn có biết trước độ dài của chuỗi hoặc danh sách [e. g. nếu bạn muốn áp dụng giải pháp cho một tập hợp các danh sách có độ dài khác nhau]?

Dung dịch

Sử dụng các chỉ số phủ định để đếm các phần tử từ cuối vùng chứa [chẳng hạn như danh sách hoặc chuỗi]

first and last: 1 7
9

Lát không liên tục

Cho đến nay, chúng ta đã biết cách sử dụng phép cắt để lấy các khối đơn lẻ của các mục liên tiếp từ một chuỗi. Nhưng nếu chúng ta muốn lấy một tập hợp con các mục không nằm cạnh nhau trong chuỗi thì sao?

Bạn có thể đạt được điều này bằng cách cung cấp đối số thứ ba cho phạm vi trong ngoặc, được gọi là kích thước bước. Ví dụ dưới đây cho thấy cách bạn có thể lấy mọi mục nhập thứ ba trong danh sách

for number in odds:
    print[number]
0

for number in odds:
    print[number]
1

Lưu ý rằng lát cắt được thực hiện bắt đầu bằng mục đầu tiên trong phạm vi, tiếp theo là các mục được thực hiện ở các khoảng cách đều nhau [các bước] sau đó. Nếu bạn muốn bắt đầu tập hợp con với mục nhập thứ ba, bạn cần chỉ định đó là điểm bắt đầu của phạm vi được cắt

for number in odds:
    print[number]
2

for number in odds:
    print[number]
3

Sử dụng đối số kích thước bước để tạo một chuỗi mới chỉ chứa mọi ký tự khác trong chuỗi “Trong khu vườn của bạch tuộc trong bóng râm”

for number in odds:
    print[number]
4

for number in odds:
    print[number]
5

Dung dịch

Để có được mọi ký tự khác, bạn cần cung cấp một lát có kích thước bước là 2

for number in odds:
    print[number]
6

Bạn cũng có thể bỏ qua phần đầu và phần cuối của lát để lấy toàn bộ chuỗi và chỉ cung cấp đối số bước để đi từng phần tử thứ hai

for number in odds:
    print[number]
7

Nếu bạn muốn lấy một lát từ phần đầu của dãy, bạn có thể bỏ qua chỉ số đầu tiên trong dãy

for number in odds:
    print[number]
8

for number in odds:
    print[number]
9

Và tương tự, bạn có thể bỏ chỉ số kết thúc trong dãy để đi một lát đến cuối dãy

1
3
5
7
0

1
3
5
7
1

quá tải

1
3
5
7
9 thường có nghĩa là phép cộng, nhưng khi được sử dụng trên các chuỗi hoặc danh sách, nó có nghĩa là “nối”. Cho rằng, bạn nghĩ toán tử nhân
names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
print['names is originally:', names]
names[1] = 'Darwin'  # correct the name
print['final value of names:', names]
0 làm gì trong danh sách?

1
3
5
7
2

  1. names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
    print['names is originally:', names]
    names[1] = 'Darwin'  # correct the name
    print['final value of names:', names]
    
    1
  2. names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
    print['names is originally:', names]
    names[1] = 'Darwin'  # correct the name
    print['final value of names:', names]
    
    2
  3. names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
    print['names is originally:', names]
    names[1] = 'Darwin'  # correct the name
    print['final value of names:', names]
    
    3
  4. names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
    print['names is originally:', names]
    names[1] = 'Darwin'  # correct the name
    print['final value of names:', names]
    
    4

Thuật ngữ kỹ thuật cho điều này là quá tải toán tử. một toán tử đơn lẻ, chẳng hạn như

1
3
5
7
9 hoặc
names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
print['names is originally:', names]
names[1] = 'Darwin'  # correct the name
print['final value of names:', names]
0, có thể thực hiện những việc khác nhau tùy thuộc vào những gì nó được áp dụng cho

Dung dịch

Toán tử nhân

names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
print['names is originally:', names]
names[1] = 'Darwin'  # correct the name
print['final value of names:', names]
0 được sử dụng trên danh sách sao chép các phần tử của danh sách và nối chúng lại với nhau

1
3
5
7
3

Nó tương đương với

1
3
5
7
4

Những điểm chính

  • names = ['Curie', 'Darwing', 'Turing']  # typo in Darwin's name
    print['names is originally:', names]
    names[1] = 'Darwin'  # correct the name
    print['final value of names:', names]
    
    8 tạo một danh sách

  • Danh sách có thể chứa bất kỳ đối tượng Python nào, kể cả danh sách [i. e. , danh sách các danh sách]

  • Danh sách được lập chỉ mục và cắt bằng dấu ngoặc vuông [e. g. , danh sách[0] và danh sách[2. 9]], giống như chuỗi và mảng

    Bạn có thể thêm nhiều phần tử vào danh sách Python không?

    extend[] Chúng ta có thể thêm nhiều mục vào danh sách bằng phương thức expand[] . Ví dụ dưới đây kết hợp hai danh sách thành một danh sách duy nhất. Mở rộng danh sách bằng cách sử dụng tiện ích mở rộng [].

    append có thể lấy hai đối số không?

    chắp thêm có thể nhận hai đối số , nhưng một đối số là chỉ mục và đối số kia là thứ bạn muốn trong chỉ mục đó.

Chủ Đề