Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python中对字符串的重复字符进行编码_Python 3.x_String_Dictionary_Replace_Character Encoding - Fatal编程技术网

Python 3.x 在Python中对字符串的重复字符进行编码

Python 3.x 在Python中对字符串的重复字符进行编码,python-3.x,string,dictionary,replace,character-encoding,Python 3.x,String,Dictionary,Replace,Character Encoding,我试图对字符串进行编码,以将字符替换为“(”如果它只出现一次,如果它出现多次,则替换为“)”。所以“hello”变成了“(())(”。我正在使用字典来解决这个问题。我正在保存字符串中每个字符的出现次数。然后我检查该字符是否出现多次,然后使用.replace()将其替换为“)”,或者将其替换为“(”。当字符串包含“)”时,就会出现问题 例如,如果我有字符串“abca”。我应该得到“(())”作为结果,但我得到“((((((((((()因为当程序到达时”)”它只看到它发生过一次,然后用“(”)更改每

我试图对字符串进行编码,以将字符替换为“(”如果它只出现一次,如果它出现多次,则替换为“)”。所以“hello”变成了“(())(”。我正在使用字典来解决这个问题。我正在保存字符串中每个字符的出现次数。然后我检查该字符是否出现多次,然后使用.replace()将其替换为“)”,或者将其替换为“(”。当字符串包含“)”时,就会出现问题

例如,如果我有字符串“abca”。我应该得到“(())”作为结果,但我得到“((((((((((()因为当程序到达时”)”它只看到它发生过一次,然后用“(”)更改每一次出现的“)”。它在其余时间工作正常。下面是我的代码:

def duplicate_encode(word):
    count = {}
    word = word.lower()
    for ch in word:
        if ch in count:
            count[ch] += 1
        else:
            count[ch] = 1
    for k in count:
        if count[k] > 1:
            word = word.replace(k, ')')
        else:
            word = word.replace(k, '(')
    print(word)


duplicate_encode("abca)")

使用以下代码,它将工作

A=input()
b=list(A)
c=list(set(A))
for i in c:
    if b.count(i)>1:
        A=A.replace(i,")")
    elif b.count(i)==1:
        A=A.replace(i,"(")
print(A)

代码中有两个错误:

  • word
    中唯一(和尾随)的
    导致final
    word=replace(word,“(”,“))
    ,这样所有
    s都被
    s替换;因此,我从头开始构建
    外部
    字符串
  • len(count)
    如果
    word
    中有任何重复字符,则
    k
    必须在
    word
    上迭代,而不是在
    count
    上迭代
固定代码:

def duplicate_encode(word):
    count = {}
    outword = ''
    word = word.lower()
    for ch in word:
        if ch in count:
            count[ch] += 1
        else:
            count[ch] = 1
    for k in word:
        if count[k] > 1:
            outword += ')'
        else:
            outword += '('
    print( word, '=>', outword )

duplicate_encode("abca)")
duplicate_encode("hello")
输出
\SO\67089558.py

abca) => )(()(
hello => (())(

非常感谢。我现在明白了,从另一个列表(比如代码中的b和c)进行比较比从一个单独的列表(比如我在使用字典)进行比较更好,因为字典让解释器检查字符串中所有出现的字符。
outword='.join([')if count[k]>1 else'('for k in word])
是word中k的
的Python版本:
循环…谢谢Josef!我现在看到我的错误,我在迭代
count
而不是
word
,没有注意到如果有重复字符,
count
的长度会更短。同样感谢Python版本。