大家好,我有一个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']
没有错误......
答案 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))