我只需要使用相同的方法将 JavaScript 问题的解决方案转换为 Python 代码
Posted
技术标签:
【中文标题】我只需要使用相同的方法将 JavaScript 问题的解决方案转换为 Python 代码【英文标题】:I just need to turn solution of JavaScript problem into Python code using the same approach 【发布时间】:2020-09-26 21:59:44 【问题描述】:我一直坚持使用相同的方法将这个 JS 字谜问题转换为 Python 解决方案。 问题来了:
这里是 javascript 解决方案:
if (first.length !== second.length)
return false;
const lookup = ;
for (let i = 0; i < first.length; i++)
let letter = first[i];
// if letter exists, increment, otherwise set to 1
lookup[letter] ? (lookup[letter] += 1) : (lookup[letter] = 1);
for (let i = 0; i < second.length; i++)
let letter = second[i];
// can't find letter or letter is zero then it's not an anagram
if (!lookup[letter])
return false;
else
lookup[letter] -= 1;
return true;
console.log(validAnagram('anagram', 'nagaram'));
这是我使用相同方法的 Python 代码:
if len(first) != len(second):
return False
lookup =
for char in first:
letter = first[char]
if lookup[letter]:
lookup[letter] += 1
else:
lookup[letter] = 1
for char in second:
letter = second[char]
if not lookup[letter]:
return False
else:
lookup[letter] -= 1
return True
print(valid_anagram("anagram", "nagaram"))
这是我在运行 Python 解决方案时遇到的错误:
letter = first[char] TypeError: string indices must be integers
【问题讨论】:
【参考方案1】:这是相同的解决方案,它使用 dict
来计算您的 Java 代码之类的字母:
from collections import Counter
def valid_anagram( str1, str2 ) :
return Counter(str1) == Counter(str2)
测试:
>>> valid_anagram('anagram', 'nagaram')
True
>>>
我在下面写,我在这里再次写,使用python的重点不是重新发明***,而是使用现有的库来使代码紧凑、快速和易于理解。
以你的代码为例:
for char in first:
letter = first[char]
if lookup[letter]:
lookup[letter] += 1
else:
lookup[letter] = 1
这可以改写为:
lookup = dict()
for letter in first:
if lookup[letter]:
lookup[letter] += 1
else:
lookup[letter] = 1
或者,更好:
lookup = Counter()
for letter in first:
lookup[letter] += 1
或者,甚至更好:
lookup = Counter( first )
那么为什么要浪费时间和空间......
【讨论】:
顺便说一句,它是 JavaScript。你能像 Javascript 代码一样不使用 import 或模块,只使用纯常规 for 循环和 if elif 语句。 @AbdifatahAli 使用 python 的重点不是重新发明***,而是使用现有的库来使代码紧凑、快速且易于理解。 @AbdifatahAli 添加到答案中【参考方案2】:您试图传入一个字符串来获取索引,而不是传入一个整数。
first = "hello"
for char in first:
print(char)
输出:
h
e
l
l
o
要获取索引,请使用:
for char in range(len(first)):
print(char)
输出:
0
1
2
3
4
这里有一个更简单的解决方案
def valid_anagram(str1, str2):
list_str1 = list(str1)
list_str1.sort()
list_str2 = list(str2)
list_str2.sort()
return (list_str1 == list_str2)
【讨论】:
我很欣赏您的解决方案和帮助,但我正在尝试使用与 JavaScript 方法相同的解决方案。以上是关于我只需要使用相同的方法将 JavaScript 问题的解决方案转换为 Python 代码的主要内容,如果未能解决你的问题,请参考以下文章
问:使用 DOM 将 Javascript(通过链接到 HTML 文件)添加到自定义元素