这两段代码给出了两个不同的结果!为什么?
len(sorted(set([w.lower() for w in text1])))
17231
len(sorted([w.lower() for w in set(text1)]))
19317
最佳答案
由于字符的大写形式不同 hash value ,set 函数不会假设它们是重复的。因此,在将所有字符转换为小写后,set()
函数将从第一个代码中的字符串中删除更多字符。
考虑以下示例:
>>> text2 = 'ABCDEFabcdef'
>>>
>>> set(w.lower() for w in text2)
set(['a', 'c', 'b', 'e', 'd', 'f'])
>>> [w.lower() for w in set(text2)]
['a', 'a', 'c', 'b', 'e', 'd', 'f', 'f', 'c', 'b', 'e', 'd']
您可以使用hash()
函数查看字符的哈希值:
>>> hash('A')
8320025024
>>> hash('a')
12416037344
多一点:
现在,如果您想获得较低字符的独特结果,您应该使用第一种方法。但如果您正在处理大文本,您最好使用生成器表达式而不是列表理解:
set(w.lower() for w in text1))
关于python - 设置字符串、循环之前和循环之后的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955643/