【问题标题】:List function listing all the characters seperately列表函数分别列出所有字符
【发布时间】:2020-07-20 10:23:15
【问题描述】:

所以我想在这里将元组转换为列表,但在此之前我还需要做一些事情。

string = "'!GAMESTATE', ('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')"
lst = list(string)
for x in lst:
    print(x)

所以输出应该变成一个列表: [('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')]

我需要删除最外面的引号 ("),我还需要删除 '!GAMESTATE'

【问题讨论】:

  • 请告诉我们确切的预期输出是什么。此外,您可能想向我们展示您迄今为止所做的尝试。
  • 好吧,我尝试使用 string.strip(""),但这不起作用。输出应该是:[('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')]跨度>
  • 预期输出是什么?
  • 这个输入来自哪里?你自己创造的吗?它看起来应该存储为 json。
  • 我尝试使用编码和解码制作自己的游戏服务器。我从未使用过 json,但我会调查一下谢谢@ekhumoro

标签: python string list tuples


【解决方案1】:

您可以使用函数eval 将您的字符串转换为元组。
然后,您可以使用切片删除此元组的第一个元素,即“!GAMESTATE”。
然后您可以使用list() 将元组转换为列表。
最后给出如下一行代码,不需要import指令:

s = "'!GAMESTATE', ('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')"
result = list(eval(s)[1:])
print(result) # [('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')]

【讨论】:

  • 关于这一点的说明: eval 永远不应该用于可能不安全的输入。因为它只是执行它提供的任何字符串,它可能会让你容易受到利用和攻击。
  • 在这种情况下,因为您知道输入是“安全的”,eval 没问题,所以我赞成。但一般情况下,应尽可能使用ast.literal_eval
【解决方案2】:

其中一个伟大的“技巧”是将ast.literal_eval 应用于字符串表达式:

安全地评估包含 Python 文字或容器显示的表达式节点或字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值和无。

当输入是“有问题的”时,这也比 eval 更安全。

import ast

string = "'!GAMESTATE', ('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')"

t = ast.literal_eval(string)
l = list(t[1:]) # ignore '!GAMESTATE'
print(l)

打印:

[('0', '2.0', '10.0'), ('1', '0.0', '10.0'), ('2', '1.0', '11.0')]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多