我可以像在 C++ 中一样在 python 中取消引用迭代器吗?

问题描述

我有一个任务:从 8 位字符串反转位。

我的实现:

def inverse(s):
    for i in s:
        if(i == '1'):
            i = '0' 
        else:
            i = '1'
    return s

它当然不起作用,但我不明白如何使它起作用。那么我可以以某种方式更改迭代器 i 的值吗?或者至少如何简单优雅地解决我的任务?

解决方法

它当然不起作用,但我不明白如何使它起作用。那么我可以以某种方式改变迭代器 i 的值吗?

你不能让它工作。 Python 没有指针,字符串是不可变的。因此根本无法修改字符串,更不用说通过其字符的迭代器了。

这里你要做的就是重新分配局部变量。

或者至少如何简单优雅地解决我的任务?

映射旧字符串,翻转字符,加入新字符串。

或者使用str.translate,如果很少使用的实用程序,这很有趣。

,

或者至少如何简单优雅地解决我的任务?

您正在逐个替换字符,.translatestr 方法对于此类任务很有用,请考虑以下示例:

bits = '01000100'
t = str.maketrans('01','10')
inverted = bits.translate(t)
print(inverted)

输出

10111011

说明:我用str.maketrans来准备翻译表,当以2-argument形式使用时,需要两个等长的str,第一个字符会被第二个字符替换成对应的字符不存在于第一个保持原样。

,

代码:

def inverse(s):
    return "".join("0" if i == "1" else "1" for i in s)

print(inverse("111000011"))

结果:

000111100
,

python 中的字符串是不可变的,字符串在创建后永远无法更改。嗯,你有点可以,但它只会创建一个新的字符串。您需要创建一个新字符串来存储结果。

inverted = ''.join('0' if i == '1' else '1' for i in s)

''.join() 从可迭代对象创建字符串,'0' if i == '1' else '1' 反转位,(i for i in s) 是一个生成器,将逆变器应用于字符串中的每个符号。