Hướng dẫn what is comparison operator chaining in python? - toán tử so sánh chuỗi trong python là gì?

Kiểm tra nhiều hơn hai điều kiện là rất phổ biến trong các ngôn ngữ lập trình. Hãy nói rằng chúng tôi muốn kiểm tra điều kiện dưới đây:

a < b < c

Cú pháp phổ biến nhất để làm như sau:

if a < b and b < c :
   {...}

Trong Python, có một cách tốt hơn để viết điều này bằng cách sử dụng chuỗi vận hành so sánh. Việc chuỗi các toán tử có thể được viết như sau:Comparison operator Chaining. The chaining of operators can be written as follows:

if a < b < c :
    {.....}

Theo sự kết hợp và ưu tiên trong Python, tất cả các hoạt động so sánh trong Python đều có cùng mức độ ưu tiên, thấp hơn so với bất kỳ hoạt động số học, dịch chuyển hoặc bitwise nào. Cũng không giống như C, các biểu thức như A

">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"

Chuỗi các nhà khai thác so sánh:

  1. So sánh mang lại giá trị boolean: Đúng hoặc sai.
  2. So sánh có thể được xiềng xích tùy ý. Ví dụ:
x < y <= z is equivalent to x < y and y <= z, 
  1. Ngoại trừ việc y chỉ được đánh giá một lần. (Nhưng trong cả hai trường hợp, Z hoàn toàn không được đánh giá khi x
  2. Chính thức, nếu A, B, C, xông, Y, Z là biểu thức và OP1, OP2, Mạnh, OPN là các toán tử so sánh, sau đó là OP1 B OP2 C, Y OPN Z tương đương với OP1 B và B OP2 C và y opn z, ngoại trừ mỗi biểu thức được đánh giá nhiều nhất một lần.
  3. Also,
a op1 b op2 c 

Nó không ngụ ý bất kỳ loại so sánh giữa A và C, vì vậy

 a < b > c

là hoàn toàn hợp pháp.

Python

if a < b and b < c :
   {...}
9
if a < b < c :
    {.....}
0
if a < b < c :
    {.....}
1

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
4
if a < b < c :
    {.....}
5
if a < b < c :
    {.....}
6
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
6
if a < b < c :
    {.....}
5
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
2
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
5
if a < b < c :
    {.....}
6
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
7
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
8
if a < b < c :
    {.....}
6
x < y <= z is equivalent to x < y and y <= z, 
0
x < y <= z is equivalent to x < y and y <= z, 
1
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
6
x < y <= z is equivalent to x < y and y <= z, 
6
if a < b < c :
    {.....}
0
x < y <= z is equivalent to x < y and y <= z, 
8
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
1
if a < b < c :
    {.....}
0
if a < b < c :
    {.....}
0
a op1 b op2 c 
5
a op1 b op2 c 
6
if a < b < c :
    {.....}
7

Output:

True
False
True
True
True

Một ví dụ khác: & nbsp; 

Python

if a < b and b < c :
   {...}
9
if a < b < c :
    {.....}
0
if a < b < c :
    {.....}
1

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
4
if a < b < c :
    {.....}
5
if a < b < c :
    {.....}
6
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
6
if a < b < c :
    {.....}
5
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
2
if a < b < c :
    {.....}
7

True
False
True
True
True
6

if a < b < c :
    {.....}
2
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
5
if a < b < c :
    {.....}
6
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
7
">" | "<" | "==" | ">=" | "<=" | "!=" | "is" ["not"] | ["not"] "in"
8
if a < b < c :
    {.....}
6
x < y <= z is equivalent to x < y and y <= z, 
0
x < y <= z is equivalent to x < y and y <= z, 
1
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
6
x < y <= z is equivalent to x < y and y <= z, 
6
if a < b < c :
    {.....}
0
x < y <= z is equivalent to x < y and y <= z, 
8
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
if a < b < c :
    {.....}
3
if a < b < c :
    {.....}
1
if a < b < c :
    {.....}
0
if a < b < c :
    {.....}
0
a op1 b op2 c 
5
a op1 b op2 c 
6
if a < b < c :
    {.....}
7

if a < b < c :
    {.....}
2
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
3

if a < b < c :
    {.....}
2
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
5

Output:

True
False

Một ví dụ khác: & nbsp;: Python 3 Documentation This article is contributed by Pratik Chhajer. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to . See your article appearing on the GeeksforGeeks main page and help other Geeks.

a op1 b op2 c 
8
if a < b < c :
    {.....}
0
 a < b > c
0
 a < b > c
1
if a < b < c :
    {.....}
1
 a < b > c
1
 a < b > c
441.


Tìm hiểu về chuỗi vận hành so sánh, và đặc biệt là các trường hợp bạn nên tránh.

Hướng dẫn what is comparison operator chaining in python? - toán tử so sánh chuỗi trong python là gì?

.

Giới thiệu

Trong pydon này, chúng ta sẽ vượt qua chuỗi các nhà khai thác so sánh:

  • cách họ làm việc;
  • cách sử dụng hữu ích; và
  • Những trường hợp kỳ lạ để tránh.

Chuỗi các nhà khai thác so sánh

Một trong những điều tôi thích về Python là một số tính năng của nó rất có ý nghĩa đến nỗi bạn thậm chí không nhận thấy rằng bạn đang sử dụng một tính năng cho đến khi ai đó chỉ ra rằng mã đó sẽ không hoạt động bằng các ngôn ngữ khác. Một ví dụ như vậy là so sánh chuỗi! Nhìn vào đoạn mã này và cho tôi biết nếu nó không có vẻ tự nhiên:

>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.

Khi Python nhìn thấy hai toán tử so sánh liên tiếp, như trong

>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
6, nó hoạt động như thể bạn đã viết một cái gì đó như
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
7, ngoại trừ
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 chỉ được đánh giá một lần (có liên quan nếu
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 là một biểu thức như một cuộc gọi chức năng).

Theo tôi, các tính năng này có rất nhiều ý nghĩa và không có vẻ đáng ngạc nhiên. Thay vào đó, bây giờ tôi cảm thấy buồn khi hầu hết các ngôn ngữ không có hỗ trợ cho hành vi này.

Một ví dụ khác sử dụng là khi bạn muốn đảm bảo rằng ba giá trị đều giống nhau:

if a < b and b < c :
   {...}
0

Bạn có biết rằng bạn thực sự có thể xâu chuỗi một số nhà khai thác so sánh tùy ý? Ví dụ:

if a < b and b < c :
   {...}
00 kiểm tra xem tất cả năm biến có giống nhau không, trong khi
if a < b and b < c :
   {...}
01 kiểm tra xem bạn có trình tự tăng nghiêm ngặt không.

Cạm bẫy

Mặc dù tính năng này trông rất hợp lý, có một vài cạm bẫy mà bạn phải tìm kiếm.

Các nhà khai thác không chuyển đổi

Chúng tôi đã thấy ở trên rằng chúng tôi có thể sử dụng

if a < b and b < c :
   {...}
02 để kiểm tra xem
if a < b and b < c :
   {...}
03,
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 và
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1 đều giống nhau. Làm thế nào bạn sẽ kiểm tra nếu tất cả đều khác nhau?

Nếu bạn nghĩ về

if a < b and b < c :
   {...}
06, thì bạn đã rơi vào cạm bẫy đầu tiên!

Nhìn vào mã này:

if a < b and b < c :
   {...}
1

Vấn đề ở đây là

if a < b and b < c :
   {...}
06 là
if a < b and b < c :
   {...}
08, kiểm tra xem
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 khác với
if a < b and b < c :
   {...}
03 và từ
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1, nhưng không nói gì về cách
if a < b and b < c :
   {...}
03 và
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1 liên quan.

Từ quan điểm toán học,

if a < b and b < c :
   {...}
14 không chuyển tiếp, tức là biết cách
if a < b and b < c :
   {...}
03 liên quan đến
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 và biết cách
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 liên quan đến
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1 không cho bạn biết
if a < b and b < c :
   {...}
03 liên quan đến
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1 như thế nào. Đối với một ví dụ chuyển tiếp, bạn có thể lấy toán tử bình đẳng
if a < b and b < c :
   {...}
21. Nếu
if a < b and b < c :
   {...}
22 và
if a < b and b < c :
   {...}
23 thì cũng đúng là
if a < b and b < c :
   {...}
24.

Biểu thức không liên tục hoặc tác dụng phụ

Hãy nhớ lại rằng trong chuỗi các so sánh, như

>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
6, biểu thức
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 ở giữa chỉ được đánh giá một lần, trong khi nếu bạn viết biểu thức mở rộng,
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
7, thì
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 sẽ được đánh giá hai lần.

Nếu

>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 chứa một biểu thức có tác dụng phụ hoặc nếu đó là thứ không đổi, thì hai biểu thức không tương đương và bạn nên nghĩ về những gì bạn đang làm.

Đoạn trích này cho thấy sự khác biệt về số lượng đánh giá biểu thức ở giữa:

if a < b and b < c :
   {...}
2

Đoạn trích này cho thấy rằng một biểu thức như

if a < b and b < c :
   {...}
30 thực sự có thể đánh giá thành
if a < b and b < c :
   {...}
31 khi nó được mở ra:

if a < b and b < c :
   {...}
3

Cú pháp

if a < b and b < c :
   {...}
32 là một lát cắt của người Viking đảo ngược danh sách. Tôi sẽ viết về việc cắt danh sách sớm, vì vậy hãy theo dõi điều đó!

Tất nhiên,

if a < b and b < c :
   {...}
30 không bao giờ nên là
if a < b and b < c :
   {...}
31, vì vậy điều này chỉ cho thấy rằng sự so sánh chuỗi và cái mở ra không phải lúc nào cũng tương đương.

Chuỗi xấu xí

Tính năng này trông thực sự tự nhiên, nhưng một số trường hợp cụ thể không quá tuyệt vời. Đây là một vấn đề khá chủ quan, nhưng cá nhân tôi không yêu thích các chuỗi mà các nhà khai thác không "phù hợp", vì vậy các chuỗi như

  • if a < b and b < c :
       {...}
    02
  • if a < b and b < c :
       {...}
    36
  • if a < b and b < c :
       {...}
    37

Trông thực sự tốt, nhưng theo ý kiến ​​của tôi, các chuỗi

  • if a < b and b < c :
       {...}
    38
  • if a < b and b < c :
       {...}
    39
  • if a < b and b < c :
       {...}
    40

Đừng nhìn tốt như vậy. Ví dụ, người ta có thể tranh luận rằng

if a < b and b < c :
   {...}
38 đọc độc đáo là kiểm tra xem
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
8 có lớn hơn cả
if a < b and b < c :
   {...}
03 và
>>> a = 1
>>> b = 2
>>> c = 3
>>> if a < b < c:
...     print("Increasing seq.")
... 
Increasing seq.
1, nhưng bạn cũng có thể viết
if a < b and b < c :
   {...}
45 hoặc
if a < b and b < c :
   {...}
46.

Bây giờ có một số chuỗi khác chỉ là khó hiểu:

  • if a < b and b < c :
       {...}
    47
  • if a < b and b < c :
       {...}
    48
  • if a < b and b < c :
       {...}
    49

Trong Python,

True
False
True
True
True
8,
if a < b and b < c :
   {...}
51,
if a < b and b < c :
   {...}
52 và
if a < b and b < c :
   {...}
53 là các toán tử so sánh, vì vậy bạn cũng có thể xâu chuỗi chúng với các toán tử khác. Điều này tạo ra những tình huống kỳ lạ như

if a < b and b < c :
   {...}
4

Dưới đây là sự cố về những gì đang xảy ra trong ví dụ trước:

  • if a < b and b < c :
       {...}
    54 tương đương với
    if a < b and b < c :
       {...}
    55;
  • if a < b and b < c :
       {...}
    56 là
    if a < b and b < c :
       {...}
    31, nhưng
  • if a < b and b < c :
       {...}
    58 là
    if a < b and b < c :
       {...}
    59, vì vậy
  • if a < b and b < c :
       {...}
    54 mở ra
    if a < b and b < c :
       {...}
    61 là
    if a < b and b < c :
       {...}
    59.

Người đã viết

if a < b and b < c :
   {...}
54 có lẽ có nghĩa là
if a < b and b < c :
   {...}
64, nhưng điều đó cũng giống như
if a < b and b < c :
   {...}
56.

Ví dụ trong mã

Chuỗi bất bình đẳng

Có một hàm tiện ích đơn giản đảm bảo rằng một giá trị nhất định nằm giữa hai giới hạn trở nên thực sự đơn giản, ví dụ:

if a < b and b < c :
   {...}
5

Hoặc nếu bạn muốn rõ ràng hơn một chút, đồng thời đảm bảo

if a < b and b < c :
   {...}
66 là một vectơ với chính xác hai mục (hãy xem Pydon không phải là về việc giải nén sâu), bạn cũng có thể viết

if a < b and b < c :
   {...}
6

Chuỗi bình đẳng

Trực tiếp từ mô -đun

if a < b and b < c :
   {...}
67 của Python, chúng ta có thể tìm thấy hàm trợ giúp (không được tiếp xúc với người dùng), có nội dung như sau:

if a < b and b < c :
   {...}
7

Hàm này kiểm tra xem một chuỗi có phải từ phương thức Dunder Dunder hay không.

Ngay lập tức, Dund Dunder xuất phát từ Double Double Undercore và chỉ đề cập đến một số phương pháp Python mà một số lớp có và cho phép chúng tương tác độc đáo với nhiều tính năng tích hợp của Python. Các phương pháp này được gọi là Dund Dunder vì tên của chúng bắt đầu và kết thúc bằng

if a < b and b < c :
   {...}
68. Bạn đã thấy các phương pháp
if a < b and b < c :
   {...}
69 và
if a < b and b < c :
   {...}
70 trong các phương pháp của Str Str và Repr xông Pydon't và phương pháp
if a < b and b < c :
   {...}
71 trong phần Truthy, Falsy và Bool không Pydon't. Tôi sẽ viết về các phương thức Dunder nói chung trong một Pydon sau đó, vì vậy hãy thoải mái đăng ký để theo dõi.

Điều đầu tiên mã thực hiện là kiểm tra xem phần đầu và kết thúc của chuỗi có giống nhau và bằng

if a < b and b < c :
   {...}
72:

if a < b and b < c :
   {...}
8

Sự kết luận

Đây là điểm chính của bài viết này, đối với bạn, trên một đĩa bạc:

Các nhà khai thác so sánh chuỗi cảm giác rất tự nhiên, bạn thậm chí không nhận thấy đó là một tính năng. Tuy nhiên, một số chuỗi có thể ném bạn ra nếu bạn bỏ qua chúng.

Điều này không cho bạn thấy rằng:

  • Bạn có thể chuỗi so sánh, và làm như vậy một cách tùy tiện nhiều lần;
  • Các chuỗi có các biểu thức có tác dụng phụ hoặc với đầu ra không xác định không tương đương với phiên bản mở rộng; và
  • Một số chuỗi sử dụng
    True
    False
    True
    True
    True
    8 hoặc
    if a < b and b < c :
       {...}
    52 có thể trông thực sự sai lệch.

Nếu bạn thích Pydon này, đừng chắc chắn để lại phản ứng bên dưới và chia sẻ điều này với bạn bè và đồng nghiệp của bạn.

Ngoài ra, đừng quên đăng ký nhận bản tin để bạn không bỏ lỡ một Pydon nào!

Người giới thiệu

  • Tài liệu Python 3, Tài liệu tham khảo ngôn ngữ Python https://docs.python.org/3/reference/expressions.html#comparisons;
  • Tài liệu Python 3, Thư viện tiêu chuẩn Python,
    if a < b and b < c :
       {...}
    67, https://docs.python.org/3/l Library/enum.html;
  • Reddit, nhận xét về "Nếu họ đã tạo ra một Python 4, những gì thay đổi từ Python 3 bạn có muốn xem không?", Chia sẻ & utm_medium = Web2x & bối cảnh = 3.

Tài liệu tham khảo trực tuyến được tư vấn lần cuối vào ngày 1 tháng 3 năm 2021.

Tôi hy vọng bạn đã học được điều gì đó mới! Nếu bạn đã làm, hãy xem xét theo bước chân của những độc giả đã mua cho tôi một lát bánh pizza. Đóng góp nhỏ của bạn giúp tôi sản xuất nội dung này miễn phí và không spam bạn với quảng cáo khó chịu.

Cure so sánh trong Python là gì?

Việc chuỗi các toán tử có thể được viết như sau: Nếu A all comparison operations in Python have the same priority, which is lower than that of any arithmetic, shifting or bitwise operation.

Nhà điều hành so sánh trong Python là gì?

Một toán tử so sánh trong Python, còn được gọi là toán tử quan hệ Python, so sánh các giá trị của hai toán hạng và trả về đúng hay sai dựa trên việc điều kiện có được đáp ứng hay không.compares the values of two operands and returns True or False based on whether the condition is met.

Python có cho phép so sánh xích không?

Trong Python, so sánh có thể được xích.Bạn có thể viết A comparisons can be chained. You can write a < x and x < b as a < x < b like in mathematics. This article describes the following contents.

Các nhà khai thác so sánh giải thích với ví dụ là gì?

Nếu một trong hai toán hạng là giá trị chuỗi, thì việc so sánh chuỗi được sử dụng.Đưa chuỗi trong trích dẫn ("chuỗi").Thận trọng!Toán tử == là một toán tử so sánh.....