programming - python software foundation



सूचियां कैसे पाइथन में केवल विशिष्ट तत्व बनाती हैं? (7)

इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास पाइथन में एक सूची है, मैं इसे अपने मूल्यों को अद्वितीय कैसे बना सकता हूं?


Answer #1

आदेश को संरक्षित करते समय डुप्लिकेट को हटाने का सबसे आसान तरीका collections.OrderedDict का उपयोग करना है। ऑर्डर्ड डिक्ट (पायथन 2.7+)।

from collections import OrderedDict
d = OrderedDict()
for x in mylist:
    d[x] = True
print d.iterkeys()

Answer #2

आदेश को संरक्षित करने के लिए:

l = [1, 1, 2, 2, 3]
result = list()
map(lambda x: not x in result and result.append(x), l)
result
# [1, 2, 3]

Answer #3

एक लाइनर और आदेश संरक्षित करें

list(OrderedDict.fromkeys([2,1,1,3]))

हालांकि आपको आवश्यकता होगी

from collections import OrderedDict

Answer #4

एक सेट में फिर से सूची में कनवर्ट करना सबसे आसान है:

my_list = list(set(my_list))

इसके साथ एक नुकसान यह है कि यह आदेश को संरक्षित नहीं करेगा। आप यह भी विचार करना चाहेंगे कि सूची के बजाय, पहले स्थान पर उपयोग करने के लिए एक सेट बेहतर डेटा संरचना होगी या नहीं।



Answer #6

http://www.peterbe.com/plog/uniqifiers-benchmark :

def f5(seq, idfun=None):  
    # order preserving
    if idfun is None:
        def idfun(x): return x
    seen = {}
    result = []
    for item in seq:
        marker = idfun(item)
        # in old Python versions:
        # if seen.has_key(marker)
        # but in new ones:
        if marker in seen: continue
        seen[marker] = 1
        result.append(item)
    return result

Answer #7

शब्दकोश समझ के बारे में कैसे?

>>> mylist = [3, 2, 1, 3, 4, 4, 4, 5, 5, 3]

>>> {x:1 for x in mylist}.keys()
[1, 2, 3, 4, 5]

@ डैनी की टिप्पणी को संपादित करें : मेरा मूल सुझाव कुंजी को आदेश नहीं रखता है। यदि आपको क्रमबद्ध कुंजी की आवश्यकता है, तो कोशिश करें:

>>> from collections import OrderedDict

>>> OrderedDict( (x,1) for x in mylist ).keys()
[3, 2, 1, 4, 5]

जो तत्व की पहली घटना द्वारा क्रम में तत्वों को रखता है (व्यापक रूप से परीक्षण नहीं किया जाता है)





python