在Python中将形式为 '[a, b, c]' 的字符串转换为列表,而不需要使用列表推导式。

21 浏览
0 Comments

在Python中将形式为 '[a, b, c]' 的字符串转换为列表,而不需要使用列表推导式。

有没有一种方法可以直接将形式为''[a, b, c]''的字符串转换为列表?

就像对于某个方法或函数ftype(f('[a, b, c]')) is list == True/isinstance(f('[a, b, c]'), list) is True这样。请注意,最终的列表应该将元素作为单独的字符串,即f('[a, b, c]')返回['a', 'b', 'c']

我已经查看了这里这里ast.literal_eval()出现错误:

ValueError: malformed string

我的输入列表(字符串)没有标记为unicode,并且项目不是单独的stringint类型。

是否有内置的方法可以进行这种转换?这实质上是一个“形式”问题。我想知道是否有一种“pythonic”的方式来做到这一点,而不是编写一个冗长的函数来拆分字符串和转换。

非常感谢您的见解。

0
0 Comments

问题的原因是需要将一个形如 '[a, b, c]' 的字符串转换为一个列表,但是不想使用列表推导式。解决方法是通过切片和字符串分割将字符串转换为列表。

在Python中,我们可以通过以下代码将字符串转换为列表:

s = '[a, b, c]'
s = s[1:-1]
s = s.split(', ')

或者可以将以上代码合并为一行:

s = s[1:-1].split(', ')

如果可能的话,是否可以用其他方法代替 `s[1:-1]`?如我之前所写,这样看起来有点硬编码。我所知道的另一种方法是使用 `s = s.replace('[', '').replace(']', '')`,但我认为 `s[1:-1]` 更好,因为它表示 "s 除去第一个和最后一个字符",这正是我们想要的。在Python中,这是标准的用法。

使用以上代码,将得到 `s=["'a'","'b'","'c'"]`。

0
0 Comments

原因:

文章开头作者提到了问题的出现原因,即问题的提问者明确要求不使用列表推导式来解决这个问题,但是作者还是提供了一个使用列表推导式的解决方法。作者认为如果有人来到这里寻求使用列表推导式的解决方案,那么他们可能有更大的问题。

解决方法:

作者提供了一个使用列表推导式的解决方法。具体步骤如下:

1. 将字符串赋值给变量s。

2. 使用切片操作s[1:-1]去掉字符串中的首尾方括号,得到一个不包含首尾方括号的字符串。

3. 使用split(",")将字符串按逗号分割成一个字符串列表。

4. 使用列表推导式对这个字符串列表进行处理,将其中的整数元素转换为int类型,其他元素保持不变。

5. 将处理后的列表赋值给变量s。

6. 打印变量s,得到结果。

解决方法的代码如下:

s = "[a, 1, b]"
s = [int(i) if i.strip().isdigit() else i.strip() for i in s[1:-1].split(",")]
print(s)

这段代码首先将字符串"[a, 1, b]"赋值给变量s。然后使用切片操作s[1:-1]去掉字符串中的首尾方括号,得到一个不包含首尾方括号的字符串。接下来使用split(",")将字符串按逗号分割成一个字符串列表。然后使用列表推导式对这个字符串列表进行处理,将其中的整数元素转换为int类型,其他元素保持不变。最后将处理后的列表赋值给变量s。最后打印变量s输出结果。

本文介绍了一个问题的出现原因以及解决方法。问题是要将一个形如"[a, b, c]"的字符串转换为一个列表,但要求不能使用列表推导式来解决。作者提供了一个使用列表推导式的解决方法,并解释了这个方法的具体步骤和代码实现。最后,作者指出如果有人来到这里寻求使用列表推导式的解决方案,可能存在更大的问题。

0
0 Comments

问题的原因是字符串的形式与列表的形式不一致,需要将字符串转换为列表。解决方法是使用replace()函数去除空格,然后使用split()函数将字符串分割成列表。

然而,这种方法在处理嵌套列表时会出现问题。嵌套列表的情况下,只有最外层的列表被正确地转换为字符串,而内层的子列表仍然保持原样。这意味着无法处理嵌套列表的情况。

因此,有人建议使用literal_eval()函数来解决这个问题。literal_eval()函数可以将字符串转换为对应的Python数据结构,包括列表和子列表。

然而,这种方法也有一些限制。literal_eval()函数只能处理字符串中包含的Python数据结构,无法处理其他类型的数据。另外,使用literal_eval()函数可能会有一些安全风险,因为它可以执行任意的Python代码。

总结起来,要将形如'[a, b, c]'的字符串转换为列表,可以使用replace()函数去除空格,然后使用split()函数分割字符串。如果需要处理嵌套列表,可以考虑使用literal_eval()函数,但需要注意安全风险和数据类型的限制。

0