سؤال

وأنا أحاول إزالة العناصر المكررة في قائمة من خلال القاموس:

def RemoveDuplicates(list):
    d = dict()

    for i in xrange(0, len(list)):
        dict[list[i]] = 1       <------- error here

    return d.keys()

ولكن من يرفع لي الخطأ التالي:

TypeError: 'type' object does not support item assignment

ما هي المشكلة؟

هل كانت مفيدة؟

المحلول

ويجب أن كتبوا:

d[list[i]] = 1

ولكن لماذا لا نفعل ذلك؟

def RemoveDuplicates(l):
    return list(set(l))

وأيضا، لا تستخدم أسماء دالة مضمنة كأسماء المتغيرة. يمكن أن يؤدي إلى الخلل مربكة.

نصائح أخرى

وبالإضافة إلى ما قاله الآخرون، فمن unpythonic للقيام بذلك:

for i in xrange(0, len(lst)):
    do stuff with lst[i]

وعندما يمكنك القيام بذلك بدلا من ذلك:

for item in lst:
    do stuff with item

وديكت هو نوع، يعني d[list[i]] = 1.

والإضافة: هذا يشير إلى الخطأ الفعلي في التعليمات البرمجية. ولكن الإجابات المقدمة من قبل الآخرين توفر أفضل طريقة لتحقيق ما كنت تهدف.

def remove_duplicates(myList):
    return list (set(myList))

ومن يبحث في التعليمات البرمجية يبدو أنك لا تقلقها ترتيب العناصر والمعنية فقط عن التفرد. في مثل هذه الحالة، يمكن لمجموعة () أن يكون بنية بيانات أفضل.

والمشكلة في التعليمات البرمجية الخاصة بك فقط لاستخدام اسم الحجة وظيفة وهو ليس اسم من القائمة نوع المدمج في وفي وقت لاحق النوع ديكت في dict[list[i]] التعبير.

لاحظ أن استخدام list(set(seq)) من المرجح أن تغيير ترتيب البنود المتبقية. إذا الاحتفاظ ترتيبها مهم، تحتاج إلى إجراء نسخة من القائمة:

items = set()
copy = []
for item in seq:
    if not item in items:
        copy.add(item)
        items.append(item)
seq = copy
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top