Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        5年前关闭。
                                                                                            
                
        
在代码审查挑战中,我最近有以下代码,称为unpythonic:

def word_count(string):
wc_dict = {}
word = ""
index = 0
while index < len(string):

    if string[index].isalnum():
        word = word + string[index]
        index += 1
    else:
        if word:
            if word.lower() in wc_dict:
                wc_dict[word.lower()] += 1
            else:
                wc_dict[word.lower()] = 1
        word = ""
        index += 1

if word:
    if word.lower() in wc_dict:
        wc_dict[word.lower()] += 1
    else:
        wc_dict[word.lower()] = 1

return wc_dict


我还为使用Ruby编写的挑战提交了不同的代码,并将该解决方案称为“ Pythonic”。

代码是Pythonic / Unpythonic是什么意思?

最佳答案

我会说“ pythonic”的意思是“为了编写易于阅读的代码,请遵循python的惯用法”。您的示例不是pythonic,因为它(可能)更容易编写。

例如使用正则表达式+ collections.Counter可以将其转换为非常明显的2-liner:

words = re.findall(r'\w+', string)
wc_dict = collections.Counter(words)


如果您只希望在空白处进行拆分,那么它将变得更加容易:

wc_dict = collections.Counter(string.split())


95%的时间,如果您使用字符串中的单个字符,则有更好的方法。

09-10 16:03