【问题标题】:How to return the each unique character per line in a list in Python?如何在 Python 的列表中返回每行的每个唯一字符?
【发布时间】:2016-01-05 10:33:50
【问题描述】:

我有一个文件 (secret_message.txt),类似于:

Yap Cat Hat
Two Ants Like Two Ant Like Kids
Ants Like Cat Two

我想单独阅读每一行并只替换一次:

Yap with Y
Cat with O
Hat with U
Two with T
Ants with A
Like with L
Kids with K

同时忽略重复的单词,使得输出文件读取:

YOU
TALK
ALOT

不过,我计划在以后的消息中重复使用相同的密码语言,因此我不需要每次都重新制作新的翻译词典。

任何关于如何最有效地做到这一点的建议将不胜感激!

以下是我尝试过的:

#!/usr/bin/env python

import os
import glob
import fileinput

filename = 'secret_message.txt'

with open(filename,'r') as f:
    f2 = f.read().split('\n')
    for line in f2:
        f3 = line.replace("Yap","Y",1)
        f3 = line.replace("Cat","O",1)
        f3 = line.replace("Hat","U",1)
        f3 = line.replace("Two","T",1)
        f3 = line.replace("Ants","A",1)
        f3 = line.replace("Like","L",1)
        f3 = line.replace("Kids","K",1)

with open('secret_answer.txt', 'w') as f:
    f.write(f3)

【问题讨论】:

  • 你使用什么语言?
  • 我认为您的密码无法处理包含多个相同字母实例的单词,例如“happy”。
  • 你试过了吗?
  • @TigerhawkT3 其实这不是问题,我只需要能够将“happy”替换为我选择的单个字母,例如“U”
  • 我的意思不是像“Yap Cat Happy”那样,我的意思是你的密码将如何拼出像“你在密码中说话”这样的短语? “秘密”这个词有两个 E。

标签: python list replace find


【解决方案1】:

也许有人有更好的解决方案,但如果您在翻译每一行之前构建一个潜在键列表,那么您可以删除您使用的每个键,以便忽略重复项。

TRANSLATOR = {
    "Cat": "O",
    ...
}

def translate(line):
    keys = set(TRANSLATOR)
    secretStr = ""
    for word in line.split(" "):
        if word in keys:
            secretStr += TRANSLATOR[word]
            keys.remove(word)
    return secretStr

【讨论】:

  • 感谢ShadowRanger的指正,我不知道。
  • 我建议不要使用 str 作为变量名,因为它会掩盖内置变量。
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多