【问题标题】:Python: Efficient Way to Substitute an Item of a List into a StringPython:将列表项替换为字符串的有效方法
【发布时间】:2011-05-02 20:28:46
【问题描述】:

我正在为 Minecraft 服务器创建一个包装器,它应该从名为 commands 的目录中获取新命令,该目录包含以命令命名的文件,所有文件都包含用于构成该命令的服务器命令。例如,以下 sn -p 来自定义“tell”命令的文件:

tell <1> <sender> says: <2>

在内部,包装器读取服务器进程的标准输出,寻找用户正在运行命令的迹象。然后,它将命令拆分,取名为“sender”,显然是发送命令的人,“command”是一个指示命令的单字字符串,以及一个名为 args 的列表,其中包含参数在命令字符串之后。例如,tell 命令的语法是这样的:

tell jim hello

这会产生以下名称:

sender = s0lder
command = tell
args = ['jim', 'hello']

我的问题是,假设上面的例子,我怎样才能使最终的字符串,说“输出”,阅读:

tell jim s0lder says: hello

我基本上需要一种方法,用 args 列表的相应名称/项目替换定义字符串中括号包围的区域,以便:

<sender> = sender
<1> = args[0]
<2> = args[1]

对 args 列表中的所有项目以此类推。谢谢。

【问题讨论】:

  • 贴出你已经尝试过的代码以及它是如何失败的。

标签: python list substitution


【解决方案1】:

这是一个不需要您更改格式的解决方案(全部以编程方式完成)。

sender = 's0lder'
args = ['jim', 'hello']

format = "tell <1> <sender> says: <2>".replace("<", "%(<").replace(">", ">)s")
# format == 'tell %(<1>)s %(<sender>)s says: %(<2>)s'
subs = {"<sender>": sender, "<1>": args[0], "<2>": args[1]}
print format % subs
# 'tell jim s0lder says: hello'

【讨论】:

    【解决方案2】:

    如果您可以稍微更改格式字符串,那么内置的format 函数应该足够了:

    args = ["jim", "hello"]
    kwargs = {"sender": "s0lder"}
    print("tell {0} {sender} says: {1}".format(*args, **kwargs))
    

    输出

    tell jim s0lder says: hello
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2016-02-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多