Hướng dẫn tuple swap python - trăn tráo đổi tuple

Chúng tôi đã thảo luận về các cách tiếp cận khác nhau để trao đổi hai số nguyên mà không cần biến tạm thời. Làm thế nào để trao đổi trong một dòng duy nhất mà không sử dụng hàm thư viện?

Nội dung chính

  • 1. swap 2 biến
  • 2. so sánh kép
  • 3. phép gán 1 biến đi kèm với điều kiện
  • 4. toán tử _
  • 5. đơn giản hóa điều kiện if
  • 7. enum trong python
  • 8. Tìm giá trị lặp lại nhiều lần nhất trong list
  • 9. đếm số lần xuất hiện trong list
  • 10. Boolean
  • 11. XKCD Comics
  • 12. enumerate
  • 13. Kiểm tra 2 từ là anagram (đổi chữ)

Python: Trong Python, có một cấu trúc đơn giản và cú pháp gọn gàng để hoán đổi các biến, chúng ta chỉ cần viết ra “x,y=y, x”. Trong Python, có một cấu trúc đơn giản và cú pháp gọn gàng để hoán đổi các biến, chúng ta chỉ cần viết ra “x,y=y, x”.

C / C ++: Dưới đây là một giải pháp cổ điển thường được cung cấp Dưới đây là một giải pháp cổ điển thường được cung cấp

// Swap using bitwise XOR (Wrong Solution in C/C++)
x ^= y ^= x ^= y; 

Giải pháp trên là sai trong C / C ++ vì nó gây ra hành vi không được định nghĩa (trình biên dịch có thể tự do hoạt động theo bất kỳ cách nào). Lý do là, sửa đổi một biến nhiều lần trong một biểu thức gây ra hành vi không được định nghĩa nếu không có sequence point giữa các thay đổi.sequence point giữa các thay đổi.

Tuy nhiên, chúng ta có thể sử dụng dấu phẩy để giới thiệu các sequence point. Vì vậy, giải pháp sửa đổi là

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);

Java: Trong Java, các quy tắc để đánh giá biểu thức phụ được xác định rõ ràng. Toán hạng tay trái luôn được đánh giá trước toán hạng tay phải (Xem phần này để biết thêm chi tiết). Trong Java, biểu thức “x ^ = y ^ = x ^ = y;” không tạo ra kết quả chính xác theo quy tắc Java. Nó đưa ra kết quả x = 0. Tuy nhiên, chúng ta có thể sử dụng “x = x ^ y ^ (y = x);” Lưu ý các biểu thức được đánh giá từ trái sang phải. Nếu ban đầu x = 5 và y = 10, biểu thức tương đương với “ x = 5 ^ 10 ^ (y = 5);”. Lưu ý rằng chúng ta không thể sử dụng điều này như trong C / C ++, nó không được định nghĩa liệu toán hạng trái hay toán hạng phải được thực thi cho bất kỳ toán tử nào (Xem phần này để biết thêm chi tiết) Trong Java, các quy tắc để đánh giá biểu thức phụ được xác định rõ ràng. Toán hạng tay trái luôn được đánh giá trước toán hạng tay phải (Xem phần này để biết thêm chi tiết). Trong Java, biểu thức “x ^ = y ^ = x ^ = y;” không tạo ra kết quả chính xác theo quy tắc Java. Nó đưa ra kết quả x = 0. Tuy nhiên, chúng ta có thể sử dụng “x = x ^ y ^ (y = x);” Lưu ý các biểu thức được đánh giá từ trái sang phải. Nếu ban đầu x = 5 và y = 10, biểu thức tương đương với “ x = 5 ^ 10 ^ (y = 5);”. Lưu ý rằng chúng ta không thể sử dụng điều này như trong C / C ++, nó không được định nghĩa liệu toán hạng trái hay toán hạng phải được thực thi cho bất kỳ toán tử nào (Xem phần này để biết thêm chi tiết)

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 

Kết quả:

After Swapping values of x and y are 10 5

Giải pháp thay thế:

  • C ++ cũng cung cấp hàm thư viện swap()
  • b = (a + b) – (a = b); 
  • a + = b – (b = a); 
  • a = a * b / (b = a) 

Nguồn và Tài liệu tiếng anh tham khảo:

  • w3school
  • python.org
  • geeksforgeeks

Tài liệu từ cafedev:

  • Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
  • Ebook về python tại đây.
  • Các series tự học lập trình khác

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

  • Group Facebook
  • Fanpage
  • Youtube
  • Instagram
  • Twitter
  • Linkedin
  • Pinterest
  • Trang chủ

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!

Trong bài viết này, mình xin giới thiệu 1 số thủ thuật hay mà mình biết trong Python

1. swap 2 biến

với một vài ngôn ngữ thì việc swap giá trị của 2 biến có thể coi là đơn giản nhưng không về ngắn gọn, với python ta hoàn toàn có thể swap giá trị của 2 biến chỉ bằng một lệnh gán

>>> x, y = 10, 20
>>> print(x, y)
>>> x, y = y, x
>>> print(x, y)

kết quả sẽ là

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 
4 và (20,10)` dự vào đây t sẽ có 1 cách rất cool để tìm ra giá trị ở vị trí thứ n trong dãy Fibonaci

a, b = 0, 1
for i in range(n):
	a, b = b, a + b

2. so sánh kép

>>> n = 10
>>> result = 1 < n < 20
>>> print(result)
True
>>> result = 1 > n <= 9
>>> print(result)
False

3. phép gán 1 biến đi kèm với điều kiện

def small(a, b, c):
    return a if a <= b and a <= c else (b if b <= a and b <= c else c)

>>> print(small(1, 0, 1))
0
>>> print(small(1, 2, 2))
1
>>> print(small(2, 2, 3))
2
>>> print(small(5, 4, 3))
3

4. toán tử _

5. đơn giản hóa điều kiện if

>>> 2 + 1
3
>>> _
3
>>> print _
3

5. đơn giản hóa điều kiện if

7. enum trong python

if m==1 or m==3 or m==5 or m==7:

8. Tìm giá trị lặp lại nhiều lần nhất trong list

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
0

9. đếm số lần xuất hiện trong list

6.Reverse

10. Boolean

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
1

7. enum trong python

8. Tìm giá trị lặp lại nhiều lần nhất trong list

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
2

8. Tìm giá trị lặp lại nhiều lần nhất trong list

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
3

9. đếm số lần xuất hiện trong list

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
4

9. đếm số lần xuất hiện trong list

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
5

10. Boolean

11. XKCD Comics

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
6

12. enumerate

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
7

11. XKCD Comics

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
8

12. enumerate

12. enumerate

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);
9
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 
0

13. Kiểm tra 2 từ là anagram (đổi chữ)

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 
1

Python: Trong Python, có một cấu trúc đơn giản và cú pháp gọn gàng để hoán đổi các biến, chúng ta chỉ cần viết ra “x,y=y, x”.

C / C ++: Dưới đây là một giải pháp cổ điển thường được cung cấp

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 
2

Giải pháp trên là sai trong C / C ++ vì nó gây ra hành vi không được định nghĩa (trình biên dịch có thể tự do hoạt động theo bất kỳ cách nào). Lý do là, sửa đổi một biến nhiều lần trong một biểu thức gây ra hành vi không được định nghĩa nếu không có sequence point giữa các thay đổi.

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: 
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------


# Python program to swap two variables in single line 
x = 5
y = 10
x, y = y, x 
print "After Swapping values of x and y are", x, y 
3

Tuy nhiên, chúng ta có thể sử dụng dấu phẩy để giới thiệu các sequence point. Vì vậy, giải pháp sửa đổi là