从字符串格式的元组中删除项目

Remove items from a tuple in string format

这是我的字符串

a = '(20.0, 8.0, 8.0, 37.0)'

我只想要这种格式的前三项

str = 20.0x8.0x8.0 

并将最后一项存储在列表中。

leftover = [37.0]

之前我的字符串只有三个维度,所以我多次使用替换函数来转换它。

converted = str(''.join(str(v) for v in a)).replace("(","").replace(")","").replace(", ","x")

我知道这不是最 pythonic 的方式,但它确实起到了作用。但我不知道如何从 str(tuple)

中删除一个元素

使用ast.literal_eval:

import ast

a = '(20.0, 8.0, 8.0, 37.0)'

a_tupl = ast.literal_eval(a)

string = 'x'.join(map(str, a_tupl[:3]))  # 20.0x8.0x8.0
leftover = [a_tupl[-1]]  # [37.0]


不要将您的变量命名为 str,因为它隐藏了内置变量。

试试这个:

from ast import literal_eval
str1 = "x".join([str(k) for k in literal_eval(a)[:3]])
leftover = [literal_eval(a)[-1]]

输出 :

'20.0x8.0x8.0'
[37.0]

不导入 ast :

str1 = "x".join([k for k in a.replace("(","").replace(")","").split(",")[:3]])
leftover = [float(a.replace("(","").replace(")","").split(",")[-1])]

您可以对拆分后的字符串使用简单的 LC,以从元组的字符串表示中取回值列表。
没有图书馆,只有一个简单的 python oneliner...:[=​​12=]

a = '(20.0, 8.0, 8.0, 37.0)'

l = [float(v) for v in a[1:-1].split(',')]
# [20.0, 8.0, 8.0, 37.0]

然后创建您需要的两个结果就很容易了:

str('x'.join([str(v) for v in l[:3]]))
# '20.0x8.0x8.0'

[l[-1]]
# [37.0]