Python 列表理解中的Rm重复
输入是一个字符串,其思想是只对字母a-z进行计数,并按字母顺序和外观计数一起打印 和往常一样,我一直这样做,直到得到一个工作结果,但现在我试图对其进行优化,以便更好地理解Python的工作方式Python 列表理解中的Rm重复,python,list-comprehension,Python,List Comprehension,输入是一个字符串,其思想是只对字母a-z进行计数,并按字母顺序和外观计数一起打印 和往常一样,我一直这样做,直到得到一个工作结果,但现在我试图对其进行优化,以便更好地理解Python的工作方式 def string_lower_as_list(string): """ >>> string_lower_as_list('a bC') ['a', ' ', 'b', 'c'] """ return list(string.lower
def string_lower_as_list(string):
"""
>>> string_lower_as_list('a bC')
['a', ' ', 'b', 'c']
"""
return list(string.lower())
from sys import argv
letters = [letter for letter in string_lower_as_list(argv[1])
if ord(letter) < 124 and ord(letter) > 96]
uniques = sorted(set(letters))
for let in uniques:
print let, letters.count(let)
def string\u lower\u as\u列表(字符串):
"""
>>>字符串\u lower\u as\u list('a bC')
[a',''b','c']
"""
返回列表(string.lower())
从系统导入argv
letters=[字符串中字母对应的字母\u lower\u as\u列表(argv[1])
如果作战需求文件(字母)<124且作战需求文件(字母)>96]
uniques=已排序(集合(字母))
对于出租单:
打印let,字母。计数(let)
应该说,win32上的Python 2.7可以直接比较字母,实际上只需要比较小写字母
letters = [letter for letter in string_lower_as_list(argv[1])
if "a" <= letter <= "z"]
编辑:正如其他人所说,您不必将字符串转换为列表。您可以直接遍历它:
用于argv[1]中的字母。lower()
您可以直接比较字母,实际上只需要比较小写字母
letters = [letter for letter in string_lower_as_list(argv[1])
if "a" <= letter <= "z"]
编辑:正如其他人所说,您不必将字符串转换为列表。您可以直接对其进行迭代:用于argv[1]中的字母。lower()
如何删除列表中的ord(字母)副本
您可以使用一个非常特定于Python且有点神奇的习语,这种习语在其他语言中不起作用:if 96
在这种情况下使用字典或元组会有什么好处吗?如果有,怎么做
您可以尝试使用Python 2.7中添加的collections.Counter
类
另外,您不需要将字符串转换为列表,以便在列表中对其进行迭代。任何iterable都可以工作,字符串也是iterable
第2页。要获取属性“this letter is alphatic”,而不是小写并与范围进行比较,只需使用str.isalpha
。Unicode对象提供相同的方法,允许相同的代码只处理外语文本,而不必知道哪些字符是“字母”。)
如何删除列表中的ord(字母)副本
您可以使用一个非常特定于Python且有点神奇的习语,这种习语在其他语言中不起作用:if 96
在这种情况下使用字典或元组会有什么好处吗?如果有,怎么做
您可以尝试使用Python 2.7中添加的collections.Counter
类
另外,您不需要将字符串转换为列表,以便在列表中对其进行迭代。任何iterable都可以工作,字符串也是iterable
第2页。要获取属性“this letter is alphatic”,而不是小写并与范围进行比较,只需使用
str.isalpha
。Unicode对象提供相同的方法,允许相同的代码只处理外语文本,而不必知道哪些字符是“字母”。) 您不必将字符串转换为列表,字符串是可编辑的:
letters = {}
for letter in argv[1].lower():
if "a" <= letter <= "z":
letters[letter] = letters.get(letter, 0) + 1
for letter in sorted(letters.keys()):
print letter, letters[letter]
letters={}
对于argv[1]中的字母。下()
如果“a”不必将字符串转换为列表,则字符串是可编辑的:
letters = {}
for letter in argv[1].lower():
if "a" <= letter <= "z":
letters[letter] = letters.get(letter, 0) + 1
for letter in sorted(letters.keys()):
print letter, letters[letter]
letters={}
对于argv[1]中的字母。下()
如果“a”是的,谁需要ord
总之:)顺便说一句,OP代码中的范围实际上是“a”到“{”包括在内。啊,所以..我没有意识到我可以做“a”@Cups:老实说,我也发现范围('a','z')让人困惑
不起作用…@Felix很容易定义检查值是否在“a”和“z”之间意味着什么,这并不意味着很容易定义介于“a”和“z”之间的一组值:)要少一点禅:Python并没有增加值的特殊概念;x+1
正在添加整数er1
到任何x
是什么,而'a'+1
是一个类型错误,因此从概念上讲,我们不能重用使整数范围工作的逻辑来创建字符串范围。当然,range
在C中进行了优化,它们可能有特殊的大小写,但接下来你会遇到一些问题,比如在<代码>范围('x','aa')
…是的,谁需要ord
无论如何:)顺便说一句,OP代码中的范围实际上是'a'到'{'包括在内。啊,所以..我没有意识到我可以做'a'@Cups:老实说,我还发现范围('a','z')令人困惑
不起作用…@Felix很容易定义检查值是否在“a”和“z”之间意味着什么,这并不意味着很容易定义介于“a”和“z”之间的一组值:)要少一点禅:Python并没有增加值的特殊概念;x+1
正在添加整数er1
到任何x
是什么,而'a'+1
是一个类型错误,因此从概念上讲,我们不能重用使整数范围工作的逻辑来创建字符串范围。当然,range
在C中进行了优化,它们可能有特殊的大小写,但接下来你会遇到一些问题,比如在range('x','aa')
…collections.Counter-crikey看起来很强大-必须从2.6升级live server才能利用,特别是在NLP类型的工作中。collections.Counter-crikey看起来很强大-必须从2.6升级live server才能利用,特别是在NLP类型的工作中。