2011-01-28 27 views
5

Tôi mới sử dụng Python. Tôi có một câu hỏi. Một số người có thể giúp tôi.thứ tự kết quả của tập hợp được in bằng Python

tôi làm như sau tại dấu nhắc lệnh:

>>> a=set() 
>>> for i in range(0,8): 
...  a.add((i,j)) 
... 

câu trả lời mà tôi nhận được khi tôi in nó là như thế này:

>>> a 
set([(2, 7), (4, 7), (6, 7), (5, 7), (7, 7), (0, 7), (1, 7), (3, 7)]) 

Tôi hiểu rằng mình in ra các kết quả trong cách nó được lưu trữ. Nhưng có cách nào tôi có thể làm cho nó được đặt hàng? Nói ví dụ theo cách này:

(0,7), (1,7), (2,7), (3,7), ... 

Cảm ơn!

Trả lời

9

Bạn nói đúng rằng một tập hợp không lưu trữ các phần tử của nó theo thứ tự được sắp xếp. Nếu bạn muốn có được một danh sách các yếu tố trong tập hợp theo thứ tự sắp xếp, bạn có thể sử dụng được xây dựng trong chức năng sorted:

>>> a 
set([(2, 7), (4, 7), (6, 7), (5, 7), (7, 7), (0, 7), (1, 7), (3, 7)]) 
>>> sorted(a) 
[(0, 7), (1, 7), (2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (7, 7)] 
2

Bạn có thể sử dụng một danh sách thay vì một bộ nếu bạn không cần phải tập Tính năng, đặc điểm.

Nếu bạn thực sự muốn một bộ đặt hàng, trên Python 2.7 bạn có thể sử dụng collections.OrderedDict, phương pháp .viewkeys() có thể được sử dụng để nhận proxy giống như thiết lập, trong khi lặp qua từ điển sẽ giúp bạn lấy chìa khóa theo thứ tự.

Hoặc bạn có thể triển khai OrderedSet của riêng mình bằng cách sử dụng collections.MutableSetcollections.OrderedDict (hoặc triển khai thực hiện OrderedDict khác nếu bạn có Python 2.6).

class OrderedSet(collections.MutableSet): 
    def __init__(self, iterable=[]): 
     self._data = collections.OrderedDict((x, None) for x in iterable) 

    def __contains__(self, x): 
     return x in self._data 

    def __iter__(self): 
     return iter(self._data) 

    def __len__(self): 
     return len(self._data) 

    def __le__(self, other): 
     if isinstance(other, OrderedSet) and hasattr(self._data, 'viewkeys'): 
      return self._data.viewkeys() <= other._data.viewkeys() 
     return super(OrderedSet, self).__le__(other) 

    def add(self, value): 
     self._data[value] = None 

    def discard(self, value): 
     self._data.pop(value, None) 

    def remove(self, value): 
     self._data.pop(value) 

    def pop(self): 
     return self._data.popitem()[0] 

    def clear(self): 
     self._data.clear() 

    def __ior__(self, other): 
     self._data.update((x, None) for x in other) 
     return self 

    def __iand__(self, other): 
     if not isinstance(other, collections.Set): 
      other = self._from_iterable(other) 
     for value in list(self._data): 
      if value not in other: 
       self.remove(value) 
     return self 

    def __and__(self, other): 
     if not isinstance(other, collections.Iterable): 
      return NotImplemented 
     if not isinstance(other, collections.Set): 
      other = self._from_iterable(other) 
     return self._from_iterable(value for value in self if value in other) 
Các vấn đề liên quan