我是Python的新手,我有一个简单的问题,比如我有一个项目列表:
['apple','red','apple','red','red','pear']
什么是将列表项添加到字典中的最简单方法,并计算项目在列表中出现的次数.
所以对于上面的列表,我希望输出为:
{'apple': 2, 'red': 3, 'pear': 1}
我试图使用O(n)复杂度的算法在任何给定文本中找到每个符号的频率.我的算法看起来像:
s = len(text) 
P = 1.0/s 
freqs = {} 
for char in text: 
    try: 
       freqs[char]+=P 
    except: 
       freqs[char]=P 
但我怀疑这个字典方法足够快,因为它取决于字典方法的底层实现.这是最快的方法吗?
更新:如果使用集合和整数,速度不会增加.这是因为该算法已经具有O(n)复杂度,因此不可能实现必要的加速.
例如,1MB文本的结果:
without collections:
real    0m0.695s
with collections:
real    0m0.625s
我试图在字典中搜索键,但我忘了添加该keys()功能.我仍然得到了预期的答案.
为什么这两个表达式的结果相同?
key in dict
和
key in dict.keys()
我有一个简单的任务:计算字符串中每个字母出现的次数.我已经使用了Counter()它,但是在一个论坛上,我看到使用dict()/的信息Counter()比使用string.count()每个字母慢得多.我认为它只会通过字符串进行一次,并且string.count()解决方案必须迭代四次(在这种情况下).为什么Counter()这么慢?
>>> timeit.timeit('x.count("A");x.count("G");x.count("C");x.count("T")', setup="x='GAAAAAGTCGTAGGGTTCCTTCACTCGAGGAATGCTGCGACAGTAAAGGAGGCCACGTGGTTGAGAGTTCCTAAGCATTCGTATGTACACCCGGACTCGATGCACTCAAACGTGCTTAAGGGTAAAGAAGGTCGAGAGGTATACTGGGGCACTCCCCTTAGAATTATATCTTGGTCAACTACAATATGGATGGAAATTCTAAGCCGAAAACGACCCGCTAGCGGATTGTGTATGTATCACAACGGTTTCGGTTCATACGCAAAATCATCCCATTTCAAGGCCACTCAAGGACATGACGCCGTGCAACTCCGAGGACATCCCTCAGCGATTGATGCAACCTGGTCATCTAATAATCCTTAGAACGGATGTGCCCTCTACTGGGAGAGCCGGCTAGACTGGCATCTCGCGTTGTTCGTACGAGCTCCGGGCGCCCGGGCGGTGTACGTTGATGTACAGCCTAAGAGCTTTCCACCTATGCTACGAACTAATTTCCCGTCCATCGTTCCTCGGACTGAGGTCAAAGTAACCCGGAAGTACATGGATCAGATACACTCACAGTCCCCTTTAATGACTGAGCTGGACGCTATTGATTGCTTTATAAGTGTTATGGTGAACTCGAAGACTTAGCTAGGAATTTCGCTATACCCGGGTAATGAGCTTAATACCTCACAGCATGTACGCTCTGAATATATGTAGCGATGCTAGCGGAACGTAAGCGTGAGCGTTATGCAGGGCTCCGCACCTCGTGGCCACTCGCCCAATGCCCGAGTTTTTGAGCAATGCCATGCCCTCCAGGTGAAGCGTGCTGAATATGTTCCGCCTCCGCACACCTACCCTACGGGCCTTACGCCATAGCTGAGGATACGCGAGTTGGTTAGCGATTACGTCATTCCAGGTGGTCGTTC'", number=10000)
0.07911698750407936
>>> timeit.timeit('Counter(x)', setup="from collections import Counter;x='GAAAAAGTCGTAGGGTTCCTTCACTCGAGGAATGCTGCGACAGTAAAGGAGGCCACGTGGTTGAGAGTTCCTAAGCATTCGTATGTACACCCGGACTCGATGCACTCAAACGTGCTTAAGGGTAAAGAAGGTCGAGAGGTATACTGGGGCACTCCCCTTAGAATTATATCTTGGTCAACTACAATATGGATGGAAATTCTAAGCCGAAAACGACCCGCTAGCGGATTGTGTATGTATCACAACGGTTTCGGTTCATACGCAAAATCATCCCATTTCAAGGCCACTCAAGGACATGACGCCGTGCAACTCCGAGGACATCCCTCAGCGATTGATGCAACCTGGTCATCTAATAATCCTTAGAACGGATGTGCCCTCTACTGGGAGAGCCGGCTAGACTGGCATCTCGCGTTGTTCGTACGAGCTCCGGGCGCCCGGGCGGTGTACGTTGATGTACAGCCTAAGAGCTTTCCACCTATGCTACGAACTAATTTCCCGTCCATCGTTCCTCGGACTGAGGTCAAAGTAACCCGGAAGTACATGGATCAGATACACTCACAGTCCCCTTTAATGACTGAGCTGGACGCTATTGATTGCTTTATAAGTGTTATGGTGAACTCGAAGACTTAGCTAGGAATTTCGCTATACCCGGGTAATGAGCTTAATACCTCACAGCATGTACGCTCTGAATATATGTAGCGATGCTAGCGGAACGTAAGCGTGAGCGTTATGCAGGGCTCCGCACCTCGTGGCCACTCGCCCAATGCCCGAGTTTTTGAGCAATGCCATGCCCTCCAGGTGAAGCGTGCTGAATATGTTCCGCCTCCGCACACCTACCCTACGGGCCTTACGCCATAGCTGAGGATACGCGAGTTGGTTAGCGATTACGTCATTCCAGGTGGTCGTTC'", number=10000)
2.1727447831030844
>>> 2.1727447831030844 / 0.07911698750407936
27.462430656767047
>>> 
我已经在Python中提出了这个问题:
从用户处获取一个数字列表,然后在该列表中运行FizzBuzz.
循环浏览列表时,请记住以下规则:
1)如果数字可以被3和5打印整除 FizzBuzz
2)如果它只能被3个打印整除 Fizz
3)如果它只能被5个打印整除 Buzz
4)否则只需打印数字
还记得elif!
我创建了以下脚本,但它在if上给出了一个错误 n%3=True
n=input()
    if n%3=True:
        print("Fizz")
    else if n%5=True:
        print ("Buzz")
    elif print n
有人可以帮忙吗?非常感谢你!
python ×5
algorithm ×1
counter ×1
dictionary ×1
fizzbuzz ×1
frequency ×1
performance ×1
probability ×1
python-2.7 ×1