2011-01-28 11 views
5

में मुद्रित किया गया है, मैं पाइथन के लिए नया हूं। मेरे पास एक सवाल है कोई मेरी मदद कर सकता है।जिस क्रम में एक सेट के परिणाम को पायथन

कमांड प्रॉम्प्ट में निम्नलिखित मुझे क्या करना:

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

जवाब है कि मैं जब मैं प्रिंट यह इस तरह है:

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

मैं समझता हूँ कि अपने को प्रिंट में परिणाम जिस तरह से इसे संग्रहीत किया जाता है। लेकिन क्या ऐसा कोई तरीका है जिसे मैं आदेश दे सकता हूं? उदाहरण के लिए इस तरह से कहें:

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

धन्यवाद!

उत्तर

9

आप सही हैं कि एक सेट क्रमबद्ध क्रम में अपने तत्वों को संग्रहीत नहीं करता है।

>>> 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

आप एक सेट के बजाय एक सूची का उपयोग कर सकते है अगर आप सेट की जरूरत नहीं है: क्या आप में निर्मित समारोह sorted उपयोग कर सकते हैं क्रमबद्ध क्रम में सेट में तत्वों की सूची प्राप्त करना चाहते हैं विशेषताएं।

यदि आप वास्तव में पाइथन 2.7 पर ऑर्डर किए गए सेट को चाहते हैं, तो आप collections.OrderedDict का उपयोग कर सकते हैं, .viewkeys() विधि का उपयोग सेट-जैसी प्रॉक्सी प्राप्त करने के लिए किया जा सकता है, जबकि शब्दकोश पर लूपिंग आपको क्रम में कुंजी प्राप्त करेगी।

या आप collections.MutableSet और collections.OrderedDict का उपयोग कर अपने OrderedSet को लागू कर सकते हैं (या यदि आपके पास पाइथन 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) 
संबंधित मुद्दे