gpt4 book ai didi

julia - 计算每个字母的单词数

转载 作者:行者123 更新时间:2023-12-01 11:14:26 25 4
gpt4 key购买 nike

来自Think Julia书,我写了下面的代码来计算每个字母的单词数:

abc = "abcdef"
letter_count = 0
fin = open("words.txt")
for letter in abc
for line in eachline(fin)
if letter in line
global letter_count += 1
end
end
println("$letter has $letter_count")
global letter_count = 0
end

但是,代码只计算字母“a”的出现次数。我不明白为什么这段代码会失败。

它返回:

56613 have a
0 have b
0 have c
0 have d
0 have e
0 have f

最佳答案

你的循环顺序错误(即外循环应该迭代字母)。你可以这样修复它(我也稍微简化了代码):

for letter in "abcdef"
letter_count = count(x -> letter in x, eachline("words.txt"))
println("$letter has $letter_count")
end

但是像这样迭代一次 words.txt 文件会更快:

let counts = zeros(Int, 6)
for line in eachline("words.txt")
for (i, letter) in enumerate("abcdef")
counts[i] += letter in line
end
end
counts
end

您也可以使用这样的广播来达到预期的结果(我发现它是一个有趣的解决方案,所以我报告了它):

julia> letters = "abcdef"
"abcdef"

julia> sum(in.(hcat(letters...), eachline("words.txt")), dims=1)
1×6 Array{Int64,2}:
56613 16305 30466 30648 76168 11277

编辑:

eachline(fin)eachline("words.txt") 的区别如下:

  • eachline("words.txt") 每次调用时打开(完成后关闭)一个新流;
  • eachline(fin) 使用相同的流,这意味着在迭代的第一个循环完成后,我们位于流的末尾,其中没有任何内容可读。

如果像这样在每次迭代后移动到流的开头,则可以保留 eachline(fin) 方法:

abc = "abcdef"
letter_count = 0
fin = open("words.txt")
for letter in abc
for line in eachline(fin)
if letter in line
global letter_count += 1
end
end
println("$letter has $letter_count")
global letter_count = 0
seekstart(fin)
end
close(fin)

请注意,我在您的代码中添加了重要的一行(并且还添加了 close(fin),因为您应该始终关闭打开的流)。但是,至少对我来说,这不是一个非常干净的方法,所以我一开始不想推荐它。

关于julia - 计算每个字母的单词数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54539354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com