我有这段代码:
unique_char = np.zeros(26,dtype=np.int);
for char in s1:
unique_char[np.int(ord(char)-97)] += 1
这是整个代码:
def check_permutation(str1,str2):
if str1 is None or str2 is None:
return False
if len(str1) != len(str2):
return False
s1 = str1.lower()
s2 = str2.lower()
unique_char = np.zeros(26,dtype=np.int);
for char in s1:
unique_char[np.int(ord(char)-97)] += 1
for char in s1:
unique_char[np.int(ord(char)-97)] -= 1
for x in unique_char:
if unique_char[x] != 0:
return False
return True
如何将其转换为理解列表?
谢谢!
答案 0 :(得分:1)
您尚未提供s1
的示例,因此我使用了自己的示例。从您的代码开始:
import numpy as np
s1='teststring'
unique_char = np.zeros(26, dtype=np.int)
for char in s1:
unique_char[np.int(ord(char) - 97)] += 1
我们得到了一个numpy数组的结果
[0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0 1 2 3 0 0 0 0 0 0]
如果您真的想将其作为列表理解,您可以执行以下操作:
unique_char = [sum(1 for c in s1 if ord(c)-97 ==i) for i, x in enumerate(unique_char)]
哪会返回表单列表的结果:
[0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
但是,如果要计算字符串中的字符数,最有效的方法是使用计数器。
from collections import Counter
unique_char = Counter(s1)
这将返回以下形式的字典子类:
Counter({'t': 3, 's': 2, 'e': 1, 'g': 1, 'i': 1, 'n': 1, 'r': 1})
要将此应用于提供的示例,您可以为每个字符串创建Counter
,然后检查每个字符串是否返回相同的值:
from collections import Counter
def check_permutation(str1,str2):
if str1 is None or str2 is None:
return False
if len(str1) != len(str2):
return False
s1 = Counter(str1.lower())
s2 = Counter(str2.lower())
all_chars = set(s1.keys() + s2.keys())
for k in all_chars:
if s1.get(k, 0) != s2.get(k, 0):
return False
return True
print check_permutation('test', 'tset')
print check_permutation('test', 'tsat')
print check_permutation('test', 'tttt')
打印:
True
False
False