我的目标是找到字符串中的重复字符,并用其他值替换那些唯一和不唯一的元素,并将这些其他值放在另一个字符串中。
我使用了Counter
,但这是到目前为止我得到的:
from collections import Counter
def duplicate_encode(word):
word = word
final_result = ""
dict_input = Counter(word)
print(dict_input)
print(dict_input.items())
for key in dict_input:
x = int(dict_input[key])
print("this is key" + "\t" + key)
print(x)
if x == 1:
final_result += "("
elif x != 1:
final_result += ")"
print("'" + final_result + "'")
duplicate_encode("binaryy")
输出:
'((((()'
例如,对于"binaryy"
,输出应为'((((())'
,而不是'((((()'
。
而且,比起print("'" + final_result + "'")
答案 0 :(得分:1)
在您的原始方法中,您执行for key in dict_input:
时要遍历计数器的键,因此最终将创建一个等于计数器中键的长度的字符串,即{{1} },如您在输出中观察到的。
而且字典仅是insertion-ordered的Python3.6 +版本,因此无论如何您都无法遍历可无序重新创建原始字符串的键。
相反,一旦创建了计数器,就需要遍历每个字符,并根据字符的计数是1还是大于1,向字符串中添加((((()
或(
对于带引号的打印,您也可以使用f字符串或字符串格式来返回带有引号的输出
)
输出将为
from collections import Counter
def duplicate_encode(word):
counter = Counter(word)
#Add ( if the count of character is 1, else add )
output = ''.join('(' if counter.get(c) == 1 else ')' for c in word)
#Return a f-string with single quotes around it
return f"'{output}'"
#Or use string formatting
#return "'{}'".format(output)
print(duplicate_encode("binaryy"))
答案 1 :(得分:1)
您的循环不应超过for key in dict_input:
。这只能靠运气在您的示例中起作用,因为A)字典在Python 3.6+中排序,并且B)您只有一个范围的重复项。循环应将实际字符编码为字符串:
final_result = ''
for c in word:
final_result += '(' if dict_input[c] == 1 else ')'
您可以(可能应该)将其缩短为
final_result = ''.join('(' if dict_input[c] == 1 else ')' for c in word)
要打印带引号的字符串,只需使用repr
。直接:
print(repr(final_result))
或使用格式:
print(f'{final_result!r}')