以字符串形式从元组中移除项

2024-09-28 22:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的绳子

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

我只想要这格式的前三项

str = 20.0x8.0x8.0 

并将最后一项存储在列表中。你知道吗

leftover = [37.0]

早些时候,字符串中只有三个维度,所以我多次使用replace函数来转换它。你知道吗

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

我知道这不是最像Python的方式,但它确实起到了作用。但我不知道如何从str(tuple)中删除元素


Tags: 函数字符串in元素列表for格式方式
3条回答

您可以在拆分的字符串上使用简单的LC,从元组的字符串表示形式中获取值列表。
没有库,只是一个简单的python oneliner…:

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]

使用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])]

相关问题 更多 >