old = [['ver','1121'],['sign','89'],['address','A45'],['type','00']]
new = [['ver','1121'],['sign','89'],['type','01']]
Tôi cần so sánh danh sách
my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]]
print[ my_list]
0 với my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]]
print[ my_list]
1 dựa trên phần tử đầu tiên của các bộ dữMatch : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
Tôi có thể có được tất cả các bộ dữ liệu phù hợp với sự hiểu biết dưới đây nhưng không thể nghĩ ra ngoài nó.
my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]]
print[ my_list]
Xin vui lòng gợi ý cho tôi một cách để làm điều đó.
CHỈNH SỬA
Tôi xin lỗi vì không rõ ràng về câu hỏi của mình, tôi đã không đề cập đến một điều nữa, các khóa trong danh sách có thể lặp đi lặp lại, có nghĩa là danh sách có thể giống như:
old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']]
new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
CẬP NHẬT
Nhờ @holdenweb, tôi đã thực hiện một số thay đổi đối với mã của anh ấy và điều này dường như đang cung cấp đầu ra mong đợi, xin vui lòng đề xuất nếu có bất kỳ sai sót nào.
old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','works?']]
new = [['ver','1121'],['sign','89'],['type','01'],['ver','This']]
formatter = "{:12}: {:8} = {}".format
newfmter = "{} [old : {}]".format
kv_old = []
for i,[kn, vn] in enumerate[new]:
vo = [[j,[ko,vo]] for j,[ko, vo] in enumerate[old] if [ko==kn] ]
for idx,[key,val] in vo:
if idx >=i:
kv_old = [key,val]
break;
if kv_old[1]==vn:
print[formatter["Match", kv_old[0], kv_old[1]]]
else:
print[formatter["Mismatch", kn, newfmter[vn, kv_old[1]]]]
Làm thế nào để so sánh tuple hoạt động trong Python?
Giới thiệu nhanh về Tuples
Python bao gồm 4 loại dữ liệu tích hợp được sử dụng để lưu trữ các bộ sưu tập dữ liệu. Những loại dữ liệu này là:
- Danh sách
- Bộ
- Từ điển
- Tuple
Một tuple cho phép bạn lưu trữ nhiều mục trong một biến duy nhất. Do đó, nó là một bộ sưu tập được đặt hàng và không thể thay đổi/bất biến. Ngoài ra, các bộ dữ liệu không đồng nhất vì chúng cho phép bạn lưu trữ các yếu tố thuộc các loại khác nhau.ordered and unchangeable/immutable. Also, tuples are heterogeneous as they allow you to store elements that are of different types.
Syntax:
my_tuple = [1, 2, 3, 'Python']
Example:
my_tuple = ["Python", "Java", 200] print[my_tuple] # OUTPUT : ['Python', 'Java', 200]
Để biết thêm chi tiết về Tuples in Python, xin vui lòng xem hướng dẫn blog của chúng tôi ở đây. Mục đích của bài viết này là để thảo luận về cách so sánh hoạt động giữa hai bộ dữ liệu. blog tutorial here. The purpose of this article is to discuss how the comparison works between two tuples.
Xây dựng vấn đề
Đưa ra hai bộ dữ liệu; Làm thế nào để so sánh giữa hai bộ dữ liệu hoạt động?
Example:
[4, 5] < [3, 5] # Equals false
Vì vậy, như được mô tả trong ví dụ trên - làm thế nào/tại sao đầu ra là sai? Hoặc làm thế nào để Python so sánh hai bộ dữ liệu này?
? So sánh bộ dữ
? Quy tắc của ngón tay cái để so sánh các bộ dữ liệu Python: The Rule of Thumb for comparing Python Tuples:
Tuples in Python are compared lexicographically. This means that the corresponding elements of the given tuples are compared to each other.
Do đó, các bộ dữ liệu trong Python được so sánh trên cơ sở vị trí của chúng: mục đầu tiên của tuple đầu tiên được so sánh với mục đầu tiên của bộ thứ hai. Nếu chúng không bằng nhau thì so sánh đầu tiên là đủ để suy ra đầu ra. Nếu không, các mục thứ hai được xem xét, sau đó thứ ba và cứ thế cho đến khi tất cả các yếu tố tương ứng của cả hai bộ dữ liệu đã được so sánh.
Chúng ta hãy xem xét những gì tài liệu Python nói về so sánh giá trị của các chuỗi tích hợp như danh sách và bộ dữ liệu: Python documentation talks about Value Comparison of built-in sequences like lists and tuples:
- Đối với hai bộ sưu tập là người khác nhau:equal”:
- Chúng phải cùng loại, [ví dụ: & nbsp; ________ 23 & nbsp; là
4 vì loại không giống nhau]. same type, [for example,my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]] print[ my_list]
3 ismy_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]] print[ my_list]
4 because the type is not the same].my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]] print[ my_list]
- Họ phải có cùng chiều dài, vàhave the same length, and
- Mỗi cặp phần tử tương ứng trong các chuỗi đã cho phải bằng nhau.in the given sequences must be equal.
- Chúng phải cùng loại, [ví dụ: & nbsp; ________ 23 & nbsp; là
- Các bộ sưu tập hỗ trợ so sánh đơn hàng và các bộ sưu tập hỗ trợ so sánh thứ tự được đặt hàng giống như các yếu tố không đồng đều/khác nhau đầu tiên của chúng.
- Ví dụ: & nbsp; ________ 25 & nbsp; giống như & nbsp; ________ 26]. Trong trường hợp một phần tử tương ứng không tồn tại, thì bộ sưu tập ngắn hơn được đặt hàng đầu tiên và được coi là nhỏ hơn. [ví dụ: & nbsp; ________ 27 & nbsp; là
8].my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]] print[ my_list]
- Ví dụ: & nbsp; ________ 25 & nbsp; giống như & nbsp; ________ 26]. Trong trường hợp một phần tử tương ứng không tồn tại, thì bộ sưu tập ngắn hơn được đặt hàng đầu tiên và được coi là nhỏ hơn. [ví dụ: & nbsp; ________ 27 & nbsp; là
⚠ & nbsp; sự chú ý Attention
- Bạn không nên coi bộ dữ liệu là vectơ trong không gian N chiều, so với chiều dài của chúng.
- Để so sánh, ________ 29 & nbsp; và & nbsp; Thay vào đó, họ đại diện cho người Viking là trước khi và người khác là sau. Vì vậy, trong ví dụ của chúng tôi ở trên [4, 5] không phải là trước [3, 5]. Do đó, đầu ra là
1.smaller than” and “greater than“; rather they represent “is before” and “is after“. So in our example above [4, 5] is not before [3, 5]. Hence, the output isold = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
1.old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
Bây giờ chúng ta hãy xem xét một vài kịch bản sẽ làm rõ hơn về khái niệm của chúng ta.
So sánh bình thường
Chúng ta hãy xem đoạn trích sau đây so sánh hai bộ dữ liệu trong nhiều tình huống:
# comparing integers print[[10, 20] < [10, 25]] print[[10, 20] == [10, 25]] print[[10, 20] > [10, 25]] # comparing strings print[['x', 'y'] < ['x', 'z']] # comparing list of tuples print[[[4, 5], [5, 6]] == [[4, 5], [5, 6]]]
Output:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
0Explanation:-
- Mặc dù so sánh
2 vàold = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
3, người ta thấy rằng phần tử đầu tiên trong cả hai bộ dữ liệu đều bằng nhau, do đó các phần tử tiếp theo được so sánh và rõ ràng làold = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
4. Điều này có nghĩa làold = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
5.old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','sorry']] new = [['ver','1121'],['sign','89'],['type','01'],['ver','sorry]]
- .
- Tương tự, trong kịch bản thứ ba, khá rõ ràng là khi chúng ta so sánh hai bộ dữ liệu chứa danh sách tương tự, đầu ra là
8.my_list = [[a,b] for [a,b] in new for [c,d] in old if [[a==c] and [b==d]]] print[ my_list]
➧Comparing không đồng đều bộ dữ liệu
Hãy xem xét rằng bạn có một vài bộ dữ liệu với độ dài khác nhau. Chúng ta hãy xem cách so sánh này hoạt động trong đoạn trích sau:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
1Output:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
2➧Comparing Tuples với các mặt hàng không đồng nhất
Trong khi so sánh hai bộ dữ liệu có các mục không đồng nhất, nghĩa là, các chức năng của toán tử ____39 bình thường; Tuy nhiên, các nhà khai thác
old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','works?']]
new = [['ver','1121'],['sign','89'],['type','01'],['ver','This']]
formatter = "{:12}: {:8} = {}".format
newfmter = "{} [old : {}]".format
kv_old = []
for i,[kn, vn] in enumerate[new]:
vo = [[j,[ko,vo]] for j,[ko, vo] in enumerate[old] if [ko==kn] ]
for idx,[key,val] in vo:
if idx >=i:
kv_old = [key,val]
break;
if kv_old[1]==vn:
print[formatter["Match", kv_old[0], kv_old[1]]]
else:
print[formatter["Mismatch", kn, newfmter[vn, kv_old[1]]]]
0 và old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','works?']]
new = [['ver','1121'],['sign','89'],['type','01'],['ver','This']]
formatter = "{:12}: {:8} = {}".format
newfmter = "{} [old : {}]".format
kv_old = []
for i,[kn, vn] in enumerate[new]:
vo = [[j,[ko,vo]] for j,[ko, vo] in enumerate[old] if [ko==kn] ]
for idx,[key,val] in vo:
if idx >=i:
kv_old = [key,val]
break;
if kv_old[1]==vn:
print[formatter["Match", kv_old[0], kv_old[1]]]
else:
print[formatter["Mismatch", kn, newfmter[vn, kv_old[1]]]]
1 không hoạt động với các loại dữ liệu không đồng nhất.Example:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
3Do đó, để đánh giá lớn hơn và ít hơn các toán tử để so sánh các mục không đồng nhất của hai bộ dữ liệu, bạn phải sử dụng hàm
old = [['ver','1121'],['sign','89'],['address','A45'],['type','00'],['ver','works?']]
new = [['ver','1121'],['sign','89'],['type','01'],['ver','This']]
formatter = "{:12}: {:8} = {}".format
newfmter = "{} [old : {}]".format
kv_old = []
for i,[kn, vn] in enumerate[new]:
vo = [[j,[ko,vo]] for j,[ko, vo] in enumerate[old] if [ko==kn] ]
for idx,[key,val] in vo:
if idx >=i:
kv_old = [key,val]
break;
if kv_old[1]==vn:
print[formatter["Match", kv_old[0], kv_old[1]]]
else:
print[formatter["Mismatch", kn, newfmter[vn, kv_old[1]]]]
2 để chuyển đổi các giá trị trong cả hai bộ dữ liệu thành một loại. Bạn có thể đọc về hàm bản đồ [] trong hướng dẫn này. map[] function in this tutorial.Example:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
4Output:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
5? Phần thưởng: Phương pháp so sánh hai bộ dữ liệu trong Python
Phương pháp 1: Sử dụng tất cả [] và zip []
- Python sườn & nbsp; tích hợp & nbsp; ____ 43 & nbsp; hàm lấy một người có thể sử dụng được là một đối số & nbsp; ____ 44 & nbsp; chẳng hạn như một danh sách, tuple hoặc từ điển. Nó trả về & nbsp; ____ 45 & nbsp; nếu tất cả các yếu tố có thể đánh giá thành & nbsp; ____ 45 & nbsp; sử dụng chuyển đổi boolean ngầm, nếu không, nó sẽ trả về & nbsp; ________ 31. Nếu có thể trống, & nbsp; ____ 48 & nbsp; returns & nbsp; ____ 45 & nbsp; vì điều kiện được thỏa mãn & nbsp; cho tất cả các yếu tố.
- Chức năng & nbsp; ____ ____ 50 & nbsp; lấy một số lượng tùy ý & nbsp; iterables & nbsp; và tổng hợp chúng cho một đối tượng có thể lặp lại, một đối tượng zip. Nó kết hợp các giá trị & nbsp; i-th & nbsp; của mỗi đối số có thể lặp lại thành một tuple. Do đó, nếu bạn vượt qua hai lần lặp, mỗi tuple sẽ chứa hai giá trị. Nếu bạn vượt qua ba lần lặp, mỗi tuple sẽ chứa ba giá trị. Ví dụ: zip cùng nhau danh sách & nbsp; ________ 51 & nbsp; và & nbsp; ________ 52 & nbsp; to & nbsp; ________ 53.
Example:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
6Output:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
7Phương pháp 2: Sử dụng tất cả [] và bản đồ [] với hàm Lambda
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
8Output:
Match : ver = 1121
Match : sign = 89
Mismatch : type = 01 [old : 00]
7Sự kết luận
Tôi hy vọng bài viết này đã giúp bạn hiểu được so sánh Tuple trong Python. Vui lòng đăng ký và theo dõi các khái niệm và thảo luận thú vị hơn.subscribe and stay tuned for more interesting concepts and discussions.
Tôi là một blogger Python chuyên nghiệp và người tạo nội dung. Tôi đã xuất bản nhiều bài báo và tạo ra các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc như một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Mạng.
Bạn có thể liên lạc với tôi @:
Upwork LinkedIn
LinkedIn