Hướng dẫn how do you select a specific part of a list in python? - làm thế nào để bạn chọn một phần cụ thể của danh sách trong python?

list( myBigList[i] for i in [87, 342, 217, 998, 500] )

Tôi đã so sánh các câu trả lời với Python 2.5.2:

  • 19.7 USEC:

    [python]
    slice(start, end, step)
    [/python]
    7

  • 20,6 USEC:

    [python]
    slice(start, end, step)
    [/python]
    8

  • 22.7 USEC:

    [python]
    slice(start, end, step)
    [/python]
    9

  • 24.6 USEC:

    [python]
    >>> a = [1, 2, 3, 4, 5, 6, 7, 8]
    [/python]
    0

Lưu ý rằng trong Python 3, số 1 được thay đổi giống như thứ 4.


Một tùy chọn khác là bắt đầu với

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
1 cho phép lập chỉ mục thông qua danh sách hoặc
[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
1:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
3 không hoạt động giống như đó là những lát cắt.

Hòa bình.

Thông tin về các Tác giả

Tôi là một người đam mê Python yêu thích lập trình như một sở thích. Doanh nhân đào tạo, tôi đang làm việc để nuôi dưỡng các nguồn thu nhập thụ động để theo đuổi những điều tôi thích làm.

NhàMonday 18th July 2022

Python làm thế nào để

"

Bài viết này là một phần của loạt

Xuất bản: Thứ Bảy ngày 30 tháng 3 năm 2013

Cập nhật lần cuối: Thứ Hai ngày 18 tháng 7 năm 2022

Vì vậy, bạn đã có một danh sách, tuple hoặc mảng và bạn muốn nhận các bộ phần tử phụ cụ thể từ nó, mà không có bất kỳ vòng lặp

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
4 dài nào?

Python có một tính năng tuyệt vời chỉ vì được gọi là cắt. Cắt lát không chỉ có thể được sử dụng cho danh sách, bộ dữ liệu hoặc mảng, mà còn là cấu trúc dữ liệu tùy chỉnh, với đối tượng lát cắt, sẽ được sử dụng sau này trong bài viết này.

Hiểu cú pháp cắt lát Python

[python]
slice(start, end, step)
[/python]

Để hiểu làm thế nào chức năng lát cắt hoạt động trong Python, nó cần thiết để bạn hiểu chỉ mục là gì. & NBSP;None if no value is provided.

Bạn có thể sử dụng chức năng lát cắt với một số loại dữ liệu khác nhau trong Python - bao gồm danh sách, bộ dữ liệu và chuỗi. Điều này là do Python sử dụng khái niệm về các chỉ số trong tất cả chúng.

Chỉ mục của người Viking của một ký tự hoặc phần tử trong kiểu dữ liệu giống như danh sách là vị trí của ký tự hoặc phần tử trong kiểu dữ liệu. Bất kể dữ liệu nào mà kiểu dữ liệu đang giữ, các giá trị chỉ mục luôn bắt đầu ở mức 0 và kết thúc ở một số ít hơn số lượng mục trong danh sách.

Python cũng sử dụng khái niệm các chỉ mục tiêu cực để làm cho dữ liệu dễ dàng truy cập hơn. Sử dụng các chỉ mục âm, người dùng Python có thể truy cập dữ liệu trong một kiểu dữ liệu từ cuối container thay vì đầu. & NBSP;

Cắt các danh sách/mảng python và cú pháp tổng hợp

Hãy bắt đầu với một danh sách bình thường, hàng ngày.

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]

Không có gì điên rồ, chỉ là một danh sách bình thường với các số từ 1 đến 8. Bây giờ chúng ta hãy nói rằng chúng ta thực sự muốn các yếu tố phụ 2, 3 và 4 được trả lại trong một danh sách mới. làm sao chúng ta làm việc đó bây giờ?

Không phải với một vòng lặp

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
4, đó là cách. Đây là cách làm pythonic:

[python]
>>> a[1:4]
[2, 3, 4]
[/python]

Điều này trả về chính xác những gì chúng tôi muốn. Cú pháp đó có nghĩa là gì? Câu hỏi hay.

Hãy để tôi giải thích nó.

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
6 có nghĩa là bắt đầu ở phần tử thứ hai trong danh sách (lưu ý rằng chỉ số cắt bắt đầu tại
[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
7).
[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
8 có nghĩa là kết thúc ở phần tử thứ năm trong danh sách, nhưng không bao gồm nó. Đại tá ở giữa là cách danh sách của Python nhận ra rằng chúng tôi muốn sử dụng cắt lát để có được các đối tượng trong danh sách.

Tăng cường Python nâng cao (Danh sách, Bộ dữ liệu và Mảng)

Ngoài ra còn có một mệnh đề thứ hai tùy chọn mà chúng ta có thể thêm cho phép chúng ta đặt cách chỉ mục của danh sách sẽ tăng giữa các chỉ mục mà chúng ta đã đặt.

Trong ví dụ trên, hãy nói rằng chúng tôi không muốn rằng

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
9 xấu xí đã được trả về và chúng tôi chỉ muốn những con số tốt, thậm chí trong danh sách của chúng tôi. Dễ như ăn bánh.

[python]
>>> a[1:4:2]
[2, 4]
[/python]

Hãy xem, nó đơn giản như vậy. Đại tá cuối cùng đó nói với Python rằng chúng tôi muốn chọn gia tăng cắt lát. Theo mặc định, Python đặt mức tăng này thành

[python]
>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
[/python]
6, nhưng dấu hai chấm đó ở cuối số cho phép chúng tôi chỉ định những gì chúng tôi muốn.

Cắt lát python (danh sách, bộ dữ liệu và mảng) ngược lại

Được rồi, làm thế nào nếu chúng ta muốn danh sách của chúng ta bị lạc hậu, chỉ vì niềm vui của nó? Hãy thử một cái gì đó điên rồ.

[python]
>>> a[::-1]
[8, 7, 6, 5, 4, 3, 2, 1]
[/python]

Gì?! Cái quái gì vậy?

Danh sách có một chút chức năng mặc định khi cắt. Nếu không có giá trị trước dấu hai chấm đầu tiên, nó có nghĩa là bắt đầu ở chỉ số bắt đầu của danh sách. Nếu không có giá trị sau đại tràng đầu tiên, điều đó có nghĩa là đi đến cuối danh sách. Điều này giúp chúng tôi tiết kiệm thời gian để chúng tôi không phải chỉ định thủ công

[python]
>>> a[1:4]
[2, 3, 4]
[/python]
1 là chỉ số kết thúc.

Được chứ. Và

[python]
>>> a[1:4]
[2, 3, 4]
[/python]
2 tôi đã lẻn vào cuối? Nó có nghĩa là tăng chỉ số mỗi lần bởi
[python]
>>> a[1:4]
[2, 3, 4]
[/python]
2, có nghĩa là nó sẽ đi qua danh sách bằng cách đi ngược. Nếu bạn muốn các chỉ mục chẵn đi ngược, bạn có thể bỏ qua mọi yếu tố thứ hai và đặt lần lặp thành
[python]
>>> a[1:4]
[2, 3, 4]
[/python]
4. Giản dị.

Cắt các bộ dữ liệu python

Tất cả mọi thứ trên cũng hoạt động cho bộ dữ liệu. Cú pháp chính xác và cùng một cách chính xác để làm mọi việc. Tôi sẽ đưa ra một ví dụ chỉ để minh họa rằng nó thực sự giống nhau.

[python]
>>> t = (2, 5, 7, 9, 10, 11, 12)
>>> t[2:4]
(7, 9)
[/python]

Và đó là nó. Đơn giản, thanh lịch và mạnh mẽ.

Sử dụng các đối tượng lát python

Có một dạng cú pháp khác mà bạn có thể sử dụng có thể dễ hiểu hơn. Có các đối tượng trong Python gọi là đối tượng

[python]
>>> a[1:4]
[2, 3, 4]
[/python]
5 và có thể được sử dụng thay cho cú pháp đại tràng ở trên.

Đây là một ví dụ:

[python]
>>> a = [1, 2, 3, 4, 5]
>>> sliceObj = slice(1, 3)
>>> a[sliceObj]
[2, 3]
[/python]

Việc khởi tạo đối tượng

[python]
>>> a[1:4]
[2, 3, 4]
[/python]
5 có 3 đối số với ý kiến ​​cuối cùng là mức tăng chỉ mục tùy chọn. Định dạng phương pháp chung là:
[python]
>>> a[1:4]
[2, 3, 4]
[/python]
7, và nó tương tự như
[python]
>>> a[1:4]
[2, 3, 4]
[/python]
8 khi được áp dụng vào danh sách hoặc tuple.

Đó là nó!

Ví dụ lát lát python

Để giúp bạn hiểu cách sử dụng lát cắt, đây là một số ví dụ:

#1 Ví dụ về lát cơ bản

Hãy giả sử bạn có một danh sách các chuỗi như vậy:

[python]
items = ['car', 'bike', 'house', 'bank', 'purse', 'photo', 'box']
[/python]

Mã sau sử dụng hàm lát cắt để lấy danh sách phụ từ danh sách các mục:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
0

Đầu ra của mã là:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
1

Vì chỉ số bắt đầu là 1, Python bắt đầu lát cắt bằng ‘Bike. Mặt khác, chỉ số cuối là 4, vì vậy lát cắt dừng danh sách tại‘ Ngân hàng.

Vì lý do này, kết quả cuối cùng của mã là một danh sách với ba mục: xe đạp, nhà và ngân hàng. Vì đoạn mã này không sử dụng bước, hàm lát cắt có tất cả các giá trị trong phạm vi và không bỏ qua bất kỳ yếu tố nào.

#2 Cắt các yếu tố đầu tiên của nv từ một danh sách với lát python

Nhận các yếu tố đầu tiên của N N N từ một danh sách có lát cũng đơn giản như sử dụng cú pháp sau:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
2

Hãy cùng lấy danh sách giống như ví dụ trước đây và xuất ba yếu tố đầu tiên của danh sách bằng cách cắt:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
3

Mã sẽ đưa ra kết quả sau:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
4

Lưu ý cách các mục [: 3] giống như các mục [0: 3]

#3 Nhận các yếu tố cuối cùng của nv từ một danh sách với lát cắt python

Điều này tương tự như ví dụ cuối cùng, ngoại trừ việc chúng ta có thể yêu cầu ba yếu tố cuối cùng thay vì yêu cầu ba yếu tố đầu tiên.

Đây là cách chúng tôi sẽ làm điều đó với danh sách trong ví dụ cuối cùng:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
5

Mã này sẽ cung cấp cho chúng tôi các kết quả sau:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
6

#4 cắt mọi yếu tố của nth nth từ một danh sách sử dụng python

Để làm điều này, chúng ta phải sử dụng tham số bước và trả về trình phụ mà chúng ta muốn. Sử dụng cùng một danh sách như trước đây và giả sử rằng chúng tôi muốn mã của mình trả về mọi yếu tố thứ hai:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
7

Mã này sẽ trình bày kết quả sau:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
8

#5 Sử dụng lát Python để đảo ngược danh sách

Hàm lát cắt làm cho việc đảo ngược một danh sách đặc biệt đơn giản. Tất cả những gì bạn cần làm là cung cấp cho hàm lát một bước tiêu cực và chức năng sẽ liệt kê các yếu tố từ cuối danh sách đến đầu - đảo ngược nó.

Tiếp tục với danh sách ví dụ chúng tôi đã sử dụng trước đây:

>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
9

Và điều này sẽ cung cấp cho chúng tôi đầu ra:

[python]
slice(start, end, step)
[/python]
0

#6 Sử dụng lát Python để thay thế một phần của danh sách

Bên cạnh việc làm cho bạn có thể trích xuất các phần của danh sách, hàm lát cắt cũng giúp bạn dễ dàng thay đổi các yếu tố trong danh sách.

Trong mã sau, chúng tôi thay đổi hai phần tử đầu tiên của danh sách thành hai giá trị mới:

[python]
slice(start, end, step)
[/python]
1

Đầu ra của mã là:

[python]
slice(start, end, step)
[/python]
2

#7 thay thế một phần và thay đổi kích thước một danh sách bằng lát

Thay đổi các yếu tố và thêm các yếu tố mới vào danh sách là khá dễ dàng với hàm lát cắt:

[python]
slice(start, end, step)
[/python]
3

Mã cung cấp đầu ra sau:

[python]
slice(start, end, step)
[/python]
4

#8 Xóa các yếu tố khỏi danh sách bằng cách sử dụng lát cắt

Sử dụng danh sách ví dụ mà chúng tôi đã sử dụng, ở đây, cách bạn có thể xóa các yếu tố khỏi danh sách với hàm lát cắt:

[python]
slice(start, end, step)
[/python]
5

Đầu ra của mã là:

[python]
slice(start, end, step)
[/python]
6

#7 thay thế một phần và thay đổi kích thước một danh sách bằng lát

Thay đổi các yếu tố và thêm các yếu tố mới vào danh sách là khá dễ dàng với hàm lát cắt:

Mã cung cấp đầu ra sau:

#8 Xóa các yếu tố khỏi danh sách bằng cách sử dụng lát cắt

Hướng dẫn how do you select a specific part of a list in python? - làm thế nào để bạn chọn một phần cụ thể của danh sách trong python?

Sử dụng danh sách ví dụ mà chúng tôi đã sử dụng, ở đây, cách bạn có thể xóa các yếu tố khỏi danh sách với hàm lát cắt:

  1. Nếu bạn muốn biết cách cắt các chuỗi, điều đó được đề cập trong một bài viết khác có tựa đề Cách lấy chuỗi phụ từ một chuỗi trong Python-Chuỗi cắt.
  2. Đó là tất cả cho bây giờ. Hy vọng bạn thích tìm hiểu về việc cắt lát và tôi hy vọng nó sẽ hỗ trợ bạn trong nhiệm vụ của bạn.