كيفية الذهاب من قائمة الكلمات إلى قائمة الأحرف المميزة في بيثون

StackOverflow https://stackoverflow.com/questions/2245903

سؤال

باستخدام Python، أحاول تحويل جملة من الكلمات إلى قائمة مسطحة بجميع الأحرف المميزة في هذه الجملة.

إليك الرمز الحالي الخاص بي:

words = 'She sells seashells by the seashore'

ltr = []

# Convert the string that is "words" to a list of its component words
word_list = [x.strip().lower() for x in words.split(' ')]

# Now convert the list of component words to a distinct list of
# all letters encountered.
for word in word_list:
    for c in word:
        if c not in ltr:
            ltr.append(c)

print ltr

إرجاع هذا الرمز ['s', 'h', 'e', 'l', 'a', 'b', 'y', 't', 'o', 'r'], ، وهو الصحيح، ولكن هل هناك طريقة أكثر ثباتا لهذا الجواب، ربما تستخدم قائمة الفهم /set?

عندما أحاول الجمع بين التعشيش والتصوير الفهم، أحصل على قوائم القوائم بدلا من قائمة مسطحة.

ترتيب الرسائل المميزة في القائمة النهائية (ltr) ليست مهمة ما هو حاسم هو أنها فريدة من نوعها.

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

المحلول

مجموعات توفر حل بسيط وكفء.

words = 'She sells seashells by the seashore'

unique_letters = set(words.lower())
unique_letters.discard(' ') # If there was a space, remove it.

نصائح أخرى

يصنع ltr مجموعة وتغيير هيئة الحلقة الخاصة بك قليلا:

ltr = set()

for word in word_list:
    for c in word:
       ltr.add(c)

أو باستخدام فهم قائمة:

ltr = set([c for word in word_list for c in word])
set([letter.lower() for letter in words if letter != ' '])

تعديل: لقد جربته ووجدت ذلك، وسوف يعمل أيضا (ربما هذا ما كان عليه أن silentghost كان يشير إلى):

set(letter.lower() for letter in words if letter != ' ')

وإذا كنت بحاجة إلى الحصول على قائمة بدلا من مجموعة، يمكنك

list(set(letter.lower() for letter in words if letter != ' '))
>>> Set ( 'o'، 's'، 'r'، 't'، 'y']) >>> تعيين (C.Lower () ل C في "إنها تبيع الصدف بواسطة شاطئ البحر" إن لم يكن c.isspace ()) تعيين (['a'، 'b'، 'e'، 'h'، 'l'، 'o'، 's'، 'r'، 't'، 'y']) >>> من Itertools استيراد سلسلة >>> مجموعة (سلسلة (* "تبيع الصدف من قبل seashore'.lower (). انقسام ()) تعيين (['A'، 'B'، 'E'، 'H'، 'o'، 's'، 'r'، 't'، 'y'])

فيما يلي بعض التوقيت المصنوع من PY3K:

>>> import timeit
>>> def t():                    # mine (see history)
    a = {i.lower() for i in words}
    a.discard(' ')
    return a

>>> timeit.timeit(t)
7.993071812372081
>>> def b():                    # danben
    return set(letter.lower() for letter in words if letter != ' ')

>>> timeit.timeit(b)
9.982847967921138
>>> def c():                    # ephemient in comment
    return {i.lower() for i in words if i != ' '}

>>> timeit.timeit(c)
8.241267610375516
>>> def d():                    #Mike Graham
    a = set(words.lower())
    a.discard(' ')
    return a

>>> timeit.timeit(d)
2.7693045186082372
set(l for w in word_list for l in w)
words = 'She sells seashells by the seashore'

ltr = list(set(list(words.lower())))
ltr.remove(' ')
print ltr
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top