如何只在字符串中打印一次字母

时间:2013-03-03 22:31:16

标签: python sorting for-loop

大家好,我有一个python问题。

我正在尝试打印给定字符串中的每个字母一次。 如何使用for循环并从a到z对字母进行排序?

继承我拥有的东西;

import string

sentence_str = ("No punctuation should be attached to a word in your list, 
                e.g., end.  Not a correct word, but end is.")

letter_str = sentence_str 
letter_str = letter_str.lower()

badchar_str = string.punctuation + string.whitespace

Alist = []


for i in badchar_str:
    letter_str = letter_str.replace(i,'')


letter_str = list(letter_str)
letter_str.sort() 

for i in letter_str:
    Alist.append(i)
    print(Alist))

我得到答案:

['a']
['a', 'a']
['a', 'a', 'a']
['a', 'a', 'a', 'a']
['a', 'a', 'a', 'a', 'a']
['a', 'a', 'a', 'a', 'a', 'b']
['a', 'a', 'a', 'a', 'a', 'b', 'b']
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c']....

我需要:

['a', 'b', 'c', 'd', 'e', 'g', 'h', 'i', 'l', 'n', 'o', 'p', 'r', 's', 't', 'u', 'w', 'y']

没有错误......

6 个答案:

答案 0 :(得分:2)

在附加之前,只需检查字母中是否有字母:

for i in letter_str:
    if  not(i in Alist):
        Alist.append(i)
    print(Alist))

或者使用Python提供的Set数据结构而不是数组。集不允许重复。

aSet = set(letter_str)

答案 1 :(得分:2)

使用itertools ifilter你可以说有一个隐含的for循环:

In [20]: a=[i for i in itertools.ifilter(lambda x: x.isalpha(), sentence_str.lower())]

In [21]: set(a)
Out[21]: 
set(['a',
     'c',
     'b',
     'e',
     'd',
     'g',
     'i',
     'h',
     'l',
     'o',
     'n',
     'p',
     's',
     'r',
     'u',
     't',
     'w',
     'y'])

答案 2 :(得分:2)

Malvolio正确地说明答案应该尽可能简单。为此,我们使用python的set类型,以最有效和最简单的方式处理唯一性问题。

然而,他的回答并不涉及删除标点符号和间距。此外,所有答案以及问题中的代码都非常低效(循环遍历badchar_str并在原始字符串中替换)。

在句子中找到所有独特字母的最佳方式(即最简单,最有效以及惯用的python)是这样的:

import string

sentence_str = ("No punctuation should be attached to a word in your list, 
                e.g., end.  Not a correct word, but end is.")

bad_chars = set(string.punctuation + string.whitespace)
unique_letters = set(sentence_str.lower()) - bad_chars

如果您希望对它们进行排序,只需将最后一行替换为:

unique_letters = sorted(set(sentence_str.lower()) - bad_chars)

答案 3 :(得分:0)

如果要打印的顺序无关紧要,可以使用:

sentence_str = ("No punctuation should be attached to a word in your list, 
                e.g., end.  Not a correct word, but end is.")
badchar_str = string.punctuation + string.whitespace
for i in badchar_str:
    letter_str = letter_str.replace(i,'')
print(set(sentence_str))

或者,如果您想按排序顺序打印,可以将其转换回列表并使用sort()然后打印。

答案 4 :(得分:0)

First principles, Clarice. Simplicity.

list(set(sentence_str))

答案 5 :(得分:0)

您可以使用set()删除重复的字符和sorted():

import string

sentence_str = "No punctuation should be attached to a word in your list, e.g., end.  Not a correct word, but end is."

letter_str = sentence_str 
letter_str = letter_str.lower()

badchar_str = string.punctuation + string.whitespace

for i in badchar_str:
    letter_str = letter_str.replace(i,'')

characters = list(letter_str);

print sorted(set(characters))