【问题标题】:Changing a character in a string in python在python中更改字符串中的字符
【发布时间】:2016-07-26 09:10:55
【问题描述】:

在阅读这个问题之前,我想发布一个免责声明。

我读到我们有可以直接替换字符串中字符的函数(string.replace),我只是想尝试手动方法。

这是我刚刚写的代码。

string = bytearray("abc'defgh",'utf-8')

for value in range(0,9):
    if string[value]=='h' or string[value]=='c':
        string[value]=='i'
    else:
        print('''Word's are not the same''')


print(string.decode("utf-8"))

我还希望给我答案的人也解释一下 bytearray(),因为我刚刚看到了这个函数,我正在尝试它。

谢谢!!

【问题讨论】:

  • string[value]=='i' -> string[value]= 'i'
  • 你没有说问题出在哪里。
  • 考虑使用translate 方法。这比手动执行要快得多:text = "abc'defgh"; text.translate({ord('h'): 'i', ord('c'): 'i'}) -> "abi'defgi"
  • 提示:在您的 if 声明之前打印 string[value]
  • 你没有告诉我们你的问题是什么,你也没有打印你的实际/期望的输出。

标签: python python-3.x bytearray


【解决方案1】:

正如其他人所提到的,有更好的方法可以做到这一点,但我认为这是一个学习练习来探索bytearray 的工作原理。

您的if 测试永远不会成功。这些测试假设 bytearray 是一个单字符串数组,但这是不正确的。 bytearray 实际上是一个整数 数组,因此您的测试需要将string 中的元素与整数进行比较。您可以使用实际的整数来做到这一点,但使用带有字节对象的in 测试更方便。当你进行替换时,你需要提供一个整数,否则你会得到这个错误:

TypeError: an integer is required

这是您的代码的新版本。我把string的名字改成了arr,因为它不是字符串,所以叫它string会让人困惑。

我还更改了 for 循环以使用 enumerate 函数,该函数迭代一个可迭代对象,产生 (index, element) 对。

arr = bytearray("abc'defgh", 'utf-8')

replacement = ord('i')
for i, v in enumerate(arr):
    if v in b'ch':
        arr[i] = replacement
    print(v, chr(v))

print(arr)
print(arr.decode('utf-8'))    

输出

97 a
98 b
99 c
39 '
100 d
101 e
102 f
103 g
104 h
bytearray(b"abi\'defgi")
abi'defgi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多