gpt4 book ai didi

python - 用列表 b 中的字符替换列表 a 中的字符

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:14 24 4
gpt4 key购买 nike

我有两个文本文件:

clues.txt – 包含字母/符号对:

A#
M*
N%

words.txt – 包含乱序词列表:

#+/084&"
#3*#%#+
8%203:
,1$&
!-*%
.#7&33&
#*#71%
&-&641'2
#))85
9&330*

我已经使用列表理解将每个文件的内容读入列表:

clues = [line.strip() for line in open("clues.txt", 'r')]

words = [line.strip() for line in open("words.txt", 'r')]

我如何用 clues 列表中的相应符号动态替换 words 列表中每个符号的所有实例?

因此,words 中的每个 # 实例都被替换为 A,每个 * 实例都被替换为 A words 替换为 M,依此类推。

最佳答案

您可以使用 str.replace 从线索中的每一行创建子字符串对,然后在替换后迭代将行重新分配给该行的更新值:

with  open("clues.txt", 'r') as f, open("words.txt", 'r') as f2:
clues = [list(line.rstrip()) for line in f]
for line in f2:
for rep, orig in clues:
line = line.replace(orig, rep)
print(line.rstrip())

输出:

A+/084&"
A3MANA+
8N203:
,1$&
!-MN
.A7&33&
AMA71N
&-&641'2
A))85
9&330M

或者使用str.translate :

with  open("clues.txt", 'r') as f, open("words.txt", 'r') as f2:
# keys are ord of character to replace,
# values are character to replace with
d = {ord(k): v for v, k in (list(line.rstrip()) for line in f)}
for line in f2:
print(line.translate(d).rstrip())

输出:

A+/084&"
A3MANA+
8N203:
,1$&
!-MN
.A7&33&
AMA71N
&-&641'2
A))85
9&330M

对于 python2 你需要使用 string.maketrans 来创建表:

from string import maketrans
with open("clues.txt", 'r') as f, open("words.txt", 'r') as f2:
# separate A -> # ...
a, b = zip(*(list(line.rstrip()) for line in f))
# create table where # maps to A, * -> M and % -> N
tbl = maketrans("".join(b), "".join(a))
for line in f2:
# translate each string using our mapping table
print(line.translate(tbl).rstrip())

输出:

A+/084&"
A3MANA+
8N203:
,1$&
!-MN
.A7&33&
AMA71N
&-&641'2
A))85
9&330M

Python3 需要将字符的 ord 映射到要替换的字符串,在 python 2 中我们做类似的事情但必须使用 string.maketrans创建最终成为字符串 '#*%', 'AMN' 的表。

关于python - 用列表 b 中的字符替换列表 a 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com