Python 在字符串中一次更改一个字符,don';你不能换绳子吗?

Python 在字符串中一次更改一个字符,don';你不能换绳子吗?,python,Python,我有一个字符串: 'ABCDEFGH' 我想循环遍历字符串,并逐个将每个字符替换为4个字符中的一个(1,2,3,4): 等 等等。然而,每次我尝试,我最终改变了原始字符串,我的输出结果是1的字符串 “1111111” 示例代码如下: letters = 'ABCDEFGH' s = list(letters) y = 0 while y < len(s): s[y] = '1' y = y + 1 letters='ABCDEFGH' s=列表(字母) y=0 当y

我有一个字符串:

'ABCDEFGH'

我想循环遍历字符串,并逐个将每个字符替换为4个字符中的一个(1,2,3,4):

等等。然而,每次我尝试,我最终改变了原始字符串,我的输出结果是1的字符串

“1111111”

示例代码如下:

letters = 'ABCDEFGH'

s = list(letters)
y = 0 
while y < len(s): 
   s[y] = '1'
   y = y + 1
letters='ABCDEFGH'
s=列表(字母)
y=0
当y
每次重新初始化列表

while y < len(letters):
  s = list(letters)
  s[y] = '1'
  y = y + 1
  dosomethingwith(s)
而y
每次重新初始化列表

while y < len(letters):
  s = list(letters)
  s[y] = '1'
  y = y + 1
  dosomethingwith(s)
而y
每次重新初始化列表

while y < len(letters):
  s = list(letters)
  s[y] = '1'
  y = y + 1
  dosomethingwith(s)
而y
每次重新初始化列表

while y < len(letters):
  s = list(letters)
  s[y] = '1'
  y = y + 1
  dosomethingwith(s)
而y
不要更改迭代之间重复使用的列表,而是每次生成一个新列表并替换一个字符:

for i in range(len(letters)):
    s = list(letters)
    s[i] = '1'
    print(''.join(s))
您可以将其与嵌套循环相结合:

for digit in '1234':
    for i in range(len(letters)):
        s = list(letters)
        s[i] = digit
        print(''.join(s))
本质上,您创建的是
'1234'
的产品和
范围(len(字母))
中的一个位置,因此您可以使用它来创建单个循环:

from itertools import product

for digit, pos in product('1234', range(len(letters))):
    s = list(letters)
    s[pos] = digit
    print(''.join(s))
通过一点技巧,您可以将其作为一个一行生成器表达式来生成所有组合:

from itertools import product

all_combos = (
    ''.join([digit if i == pos else c for i, c in enumerate(letters)])
    for digit, pos in product('1234', range(len(letters))))
这将在
字母
上动态地构建一个新列表,将位置
pos
处的一个字符替换为数字

演示:


每次生成一个新列表并替换一个字符,而不是更改迭代之间重复使用的列表:

for i in range(len(letters)):
    s = list(letters)
    s[i] = '1'
    print(''.join(s))
您可以将其与嵌套循环相结合:

for digit in '1234':
    for i in range(len(letters)):
        s = list(letters)
        s[i] = digit
        print(''.join(s))
本质上,您创建的是
'1234'
的产品和
范围(len(字母))
中的一个位置,因此您可以使用它来创建单个循环:

from itertools import product

for digit, pos in product('1234', range(len(letters))):
    s = list(letters)
    s[pos] = digit
    print(''.join(s))
通过一点技巧,您可以将其作为一个一行生成器表达式来生成所有组合:

from itertools import product

all_combos = (
    ''.join([digit if i == pos else c for i, c in enumerate(letters)])
    for digit, pos in product('1234', range(len(letters))))
这将在
字母
上动态地构建一个新列表,将位置
pos
处的一个字符替换为数字

演示:


每次生成一个新列表并替换一个字符,而不是更改迭代之间重复使用的列表:

for i in range(len(letters)):
    s = list(letters)
    s[i] = '1'
    print(''.join(s))
您可以将其与嵌套循环相结合:

for digit in '1234':
    for i in range(len(letters)):
        s = list(letters)
        s[i] = digit
        print(''.join(s))
本质上,您创建的是
'1234'
的产品和
范围(len(字母))
中的一个位置,因此您可以使用它来创建单个循环:

from itertools import product

for digit, pos in product('1234', range(len(letters))):
    s = list(letters)
    s[pos] = digit
    print(''.join(s))
通过一点技巧,您可以将其作为一个一行生成器表达式来生成所有组合:

from itertools import product

all_combos = (
    ''.join([digit if i == pos else c for i, c in enumerate(letters)])
    for digit, pos in product('1234', range(len(letters))))
这将在
字母
上动态地构建一个新列表,将位置
pos
处的一个字符替换为数字

演示:


每次生成一个新列表并替换一个字符,而不是更改迭代之间重复使用的列表:

for i in range(len(letters)):
    s = list(letters)
    s[i] = '1'
    print(''.join(s))
您可以将其与嵌套循环相结合:

for digit in '1234':
    for i in range(len(letters)):
        s = list(letters)
        s[i] = digit
        print(''.join(s))
本质上,您创建的是
'1234'
的产品和
范围(len(字母))
中的一个位置,因此您可以使用它来创建单个循环:

from itertools import product

for digit, pos in product('1234', range(len(letters))):
    s = list(letters)
    s[pos] = digit
    print(''.join(s))
通过一点技巧,您可以将其作为一个一行生成器表达式来生成所有组合:

from itertools import product

all_combos = (
    ''.join([digit if i == pos else c for i, c in enumerate(letters)])
    for digit, pos in product('1234', range(len(letters))))
这将在
字母
上动态地构建一个新列表,将位置
pos
处的一个字符替换为数字

演示:


非常感谢。虽然所有的答案都很好,但你的答案是最深入的。谢谢!虽然所有的答案都很好,但你的答案是最深入的。谢谢!虽然所有的答案都很好,但你的答案是最深入的。谢谢!虽然所有的答案都很好,但你的答案是最深刻的。