【问题标题】:Looking for the python equivalent to this javascript code寻找与此 javascript 代码等效的 python
【发布时间】:2019-11-21 10:17:24
【问题描述】:

我正在学习 Python,以便能够处理统计数据。我已经了解 C# 和 javascript,并且可以使用这些语言解决这个问题,但是我很难将解决方案翻译成 python。

问题 计算 .txt 文件中所有唯一的四个字母单词。任何带有撇号的单词都应该被忽略。忽略单词的大小写(即工具和工具只能算作一个单词)。打印出(以便用户可以看到)唯一的四个字母单词的数量。

根据单词的最后两个字母(单词结尾)划分四个字母的单词。数一数这些词尾你有多少个单词。

打印出一个词尾列表以及你为每个词尾找到的词数。

我在下面的 Javascript 中解决了这个问题:

var listOfWords = ['card','alma','soon','bard','moon','dare'];
var groupings = {};

for(var i = 0; i < listOfWords.length; i++);
{
    var ending = listOfWords[i].substring(2,4)
    if(groupings[ending] === undefined)
    {
        groupings[ending] = {}
        groupings[ending].words = []
        groupings[ending].count = 0
    }
    groupings[ending].words.push(listOfWords[i])
    groupings[ending].count++
};

console.debug(groupings);

这是我目前在 python 中所拥有的:

import re
text = open("words.txt")
regex = re.compile(r'\b\w{4}\b')
allFours = []
groupings = []

for line in text:
    four_letter_words = regex.findall(line)
    for word in four_letter_words:        
        allFours.append(word)

mylist = list(dict.fromkeys(allFours))
uniqueWordCount = len(mylist)
print(uniqueWordCount)
for i = 0; i < mylist.length; i++:
    var ending = mylist[i]

我希望我已经清楚地解释了所有问题。非常感谢所有帮助,谢谢。

【问题讨论】:

  • 除此之外不是有效的 Python(Python 没有 var 关键字;它的 for 循环语法不同)您的问题究竟是什么?
  • 嗯,这里有很多问题:如何从列表中选择一个单曲项目,然后执行相当于 .substring 的 python,所以你会看到我有 "ending = mylist[i]" 怎么办然后我将所选项目子串化。
  • 我需要这样做 *** var ending = listOfWords[i].substring(2,4) *** in python

标签: javascript python loops for-loop substring


【解决方案1】:

问题 计算 .txt 文件中所有唯一的四个字母单词。任何带有撇号的单词都应该被忽略。忽略单词的大小写(即工具和工具只能算作一个单词)。打印出(以便用户可以看到)唯一的四个字母单词的数量。

根据单词的最后两个字母(单词结尾)划分四个字母的单词。数一数这些词尾的词数。

  • 独特->设置
  • 4 个字母 -> 最好只检查长度而不是使用正则表达式,正则表达式很慢
  • 忽略带撇号的单词 -> "'" not in word
  • 忽略大小写 -> 全部转换为小写,简单
  • 根据最后 2 个字母划分集合 -> 制作字典
result = set()
with open("words.txt") as fd:
    for line in fd:
        matching_words = {word for word in line.lower().split() if len(word)==4 and "'" not in word}
        result.update(matching_words)
print(result)
print(len(result))

line.lower() 使整行变为小写字母,然后 .split() 使用默认参数将其拆分为空格。

result_dict = {}
for word in result:
    # better to use default dict here but you'll need to read docs for that
    result_dict[word[2:]] = result_dict.get(word[2:], []) + [word]
print(result_dict)
print({key: len(value) for key, value in result_dict.items()})

【讨论】:

  • 正是我想要的,谢谢你的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2011-09-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多