30/09/2018, 17:23

Hỏi về so sánh trong python

Các bác cho e hỏi chút ạ, hiện tại e đang học về python, đến phần danh sách (list) e muốn hỏi là câu lệnh cmp khi so sánh 2 danh sách thì nó dựa vào j để so sánh ạ. Ví dụ e có đoạn code như này

list1, list2 = [123, 'xyz'], [456, 'abc']

print cmp(list1, list2);
print cmp(list2, list1);
list3 = list2 + [786];
print cmp(list2, list3)

kết quả hiện ra là

-1, 1 , - 1

em mới chỉ hiểu là 1 là đúng, -1 là sai nhưng không hiểu nó sẽ lấy điều kiện như nào để so sánh giữa các chuỗi với nhau ạ,

Em cảm ơn

viết 19:33 ngày 30/09/2018

cmp(a,b) trả về -1, hay số âm, tức là a < b chứ ko phải sai hay đúng. Trả về 1, hay số dương, tức là a > b, còn trả về 0 là a == b.

nó so sánh tương tự như khi so sánh chuỗi thôi, ví dụ ‘ab’ thì < ‘abc’ nên cmp(‘ab’, ‘abc’) sẽ cho ra kết quả -1

ở đây list1[0] là 123, bé hơn list2[0] là 456 nên cmp(list1, list2) trả về -1, tức là list1 < list2

list3 = [456, ‘abc’, 786]. list2 có 2 phần tử đầu tiên giống list3, nhưng do ko có phần tử thứ 3 nên được tính là nhỏ hơn list3 => cmp(list2, list3) trả về -1.

còn nếu 2 phần tử so sánh khác loại thì có lẽ hơi vô nghĩa, ví dụ so sánh [1, 2, 3] với [‘a’, ‘b’, ‘c’] tức là đem số đi so sánh với chuỗi thì so cái gì.

vietanh viết 19:38 ngày 30/09/2018

em cảm ơn a đã trả lời ạ, a cho e hỏi thêm là ví dụ em có 2 chuỗi:

list = [123 , 'xyz']
list1 = [456, 'abc'}

thì kết quả trả về sẽ như nào ạ? khi so sánh là nó so sánh tất cả các phần tử của chuỗi hay chỉ so sánh đến phần tử nào ạ?

với ‘xyz’ và ‘abc’ so sánh với nhau là dựa vào j để so sánh ạ?

Em cảm ơn

Gió viết 19:23 ngày 30/09/2018
  • không nên lấy từ khoá dùng với mục đích khác
  • ‘}’ chắc bạn gõ nhầm
  • so sánh 2 list thì nó sẽ so từng phần tử. Khác nhau tại đâu thì trả về kết quả tại lượt so sánh đó. Nếu bên nào hết trước thì bên đó nhỏ hơn
  • so sánh chuỗi cũng giống list
vietanh viết 19:27 ngày 30/09/2018

cảm ơn bạn ý mình là cái ‘xyz’ > ‘abc’ là do dựa vào bảng chữ cái hay như nào ý?

Gió viết 19:37 ngày 30/09/2018

Là dựa vào bảng mã. Cụ thể hơn là nó so sánh bằng hàm ord của từng kí tự

Bài liên quan
0