将 List 的字符串表示形式转换为 Python 中的 List

将 List 的字符串表示形式转换为 Python 中的 List

Convert string representation of List to List in Python

使用该ast.literal_eval()方法将列表的字符串表示形式转换为列表。

ast.literal_eval()方法允许我们安全地评估包含 Python 文字的字符串。

主程序
from ast import literal_eval my_str = '[1,2,3,4]' # ✅ convert string representation of list to list (ast.literal_eval()) my_list = literal_eval(my_str) print(my_list) # 👉️ [1, 2, 3, 4] print(type(my_list)) # 👉️ <class 'list'>

该示例使用该ast.literal_eval()方法将列表的字符串表示形式转换为实际的列表对象。

ast.literal_eval
方法允许我们安全地评估包含 Python 文字

字符串。

字符串可能由字符串、字节、数字、元组、列表、字典、集合、布尔值和 None 组成。

或者,您可以使用该str.strip()方法删除括号。

使用 strip() 将 List 的字符串表示形式转换为 List

这是一个三步过程:

  1. 使用str.strip()方法删除括号。
  2. 在每个逗号上拆分字符串。
  3. 或者,将每个列表元素转换为整数。
主程序
my_str = '[1,2,3,4]' my_list = [int(item) for item in my_str.strip('[]').split(',')] print(my_list) # 👉️ [1, 2, 3, 4]

str.strip方法返回删除了指定前导字符和尾随字符字符串副本。

将引用列表元素的字符串转换为列表

如果您有一个包含引号元素的字符串,请使用该str.replace()方法删除不必要的引号。

主程序
my_str = '["a", "b", "c"]' my_list = my_str.strip('[]').replace('"', '').split(', ') print(my_list) # 👉️ ['a', 'b', 'c']
我们使用该str.replace()方法在调用该方法之前从字符串中删除双引号str.split()

将 JSON 字符串转换为 Python 列表

如果您有一个有效的 JSON 字符串,您还可以使用该json.loads()方法将列表的字符串表示形式转换为本机 Python 列表。

主程序
import json my_str = '["a", "b", "c"]' my_list = json.loads(my_str) print(my_list) # 👉️ ['a', 'b', 'c'] print(type(my_list)) # 👉️ <class 'list'>

json.loads方法JSON 字符串解析为本机 Python 对象。

这种方法也适用于包含数字的数组。

主程序
import json my_str = '[1, 2, 3, 4]' my_list = json.loads(my_str) print(my_list) # 👉️ [1, 2, 3, 4] print(type(my_list)) # 👉️ <class 'list'>

如果正在解析的数据不是有效的 JSON 字符串,JSONDecodeError则会引发 a 。

请注意,此方法仅在您具有有效的 JSON 字符串时才有效。

如果有用单引号括起来的嵌套字符串,这是行不通的。

在这种情况下,您应该在拆分每个逗号上的字符串之前使用该str.replace()方法删除不必要的引号。

使用 re.findall() 将列表的字符串表示形式转换为列表

您还可以使用该re.findall()方法将列表的字符串表示形式转换为列表。

主程序
import re my_str = '[1, 2, 3, 4]' list_of_strings = re.findall(r'[0-9]+', my_str) print(list_of_strings) # 👉️ ['1', '2', '3', '4'] list_of_integers = [int(item) for item in list_of_strings] print(list_of_integers) # 👉️ [1, 2, 3, 4]

如果您的列表包含字符串,则可以使用相同的方法。

主程序
import re my_str = '["ab", "cd", "ef", "gh"]' list_of_strings = re.findall(r'\w+', my_str) print(list_of_strings) # 👉️ ['ab', 'cd', 'ef', 'gh']

re.findall方法将一个模式和一个字符串作为参数,并返回一个字符串列表
其中包含字符串中该模式的所有非重叠匹配项。

如果您的列表包含数字,请使用以下正则表达式。

主程序
import re my_str = '[1, 2, 3, 4]' list_of_strings = re.findall(r'[0-9]+', my_str) print(list_of_strings) # 👉️ ['1', '2', '3', '4']

方括号[]称为字符类,匹配指定范围内的数字。

加号+使正则表达式匹配前面字符(数字范围)的 1 次或多次重复。

字符\w匹配:

  • 可以是任何语言中单词的一部分的字符
  • 数字
  • 下划线字符

使用 eval() 将列表的字符串表示形式转换为列表

您还可以使用该eval()函数将列表的字符串表示形式转换为列表。

主程序
my_str = '[1, 2, 3, 4]' my_list = eval(my_str, {'__builtins__': None}, {}) print(my_list) # 👉️ [1, 2, 3, 4] print(type(my_list)) # 👉️ <class 'list'>

但是,请注意,使用eval用户提供的数据并不安全。

相反,您应该使用更安全的替代方案 – ast.literal_eval.

主程序
from ast import literal_eval my_str = '[1,2,3,4]' my_list = literal_eval(my_str) print(my_list) # 👉️ [1, 2, 3, 4] print(type(my_list)) # 👉️ <class 'list'>

使用 map() 将列表的字符串表示形式转换为列表

您还可以使用该map()函数将列表的字符串表示形式转换为列表。

主程序
my_str = '[1, 2, 3, 4]' my_list = list(map(int, my_str[1:-1].split(','))) print(my_list) # 👉️ [1, 2, 3, 4]

如果您有一个字符串列表,请使用该str.replace()方法而不是
map().

主程序
my_str = '["ab", "cd", "ef", "gh"]' my_list = list( map( lambda x: x.replace('"', ''), my_str[1:-1].split(',') ) ) print(my_list) # 👉️ [1, 2, 3, 4]

我们使用字符串切片从字符串(括号)中排除第一个和最后一个字符,并在每个逗号处拆分字符串。

map ()函数将一个函数和一个可迭代对象作为参数,并使用可迭代对象的每个项目调用该函数。

我们将int()类传递给该map()函数,因此它会使用字符串列表中的每个数字进行调用。

最后一步是将
地图对象转换为列表

# 使用 PyYAML 将列表的字符串表示形式转换为列表

您还可以使用PyYAML模块将列表的字符串表示形式转换为列表。

首先,确保通过运行以下命令安装了 PyYAML 模块。

pip install PyYAML # 👇️ or with pip3 pip3 install PyYAML

现在您可以导入并使用 PyYAML 模块。

主程序
import yaml my_str = '[1, 2, 3, 4]' my_list = yaml.safe_load(my_str) print(my_list) # 👉️ [1, 2, 3, 4]

如果您的列表包含字符串,也可以使用 PyYAML 模块。

主程序
import yaml my_str = '["ab", "cd", "ef", "gh"]' my_list = yaml.safe_load(my_str) print(my_list) # 👉️ ['ab', 'cd', 'ef', 'gh']

yaml.safe_load()方法加载 YAML 语言的一个子集。建议加载不受信任的输入。

yaml_full_load如果您信任正在解析的数据,还可以使用一种方法。

主程序
import yaml my_str = '[1, 2, 3, 4]' my_list = yaml.full_load(my_str) print(my_list) # 👉️ [1, 2, 3, 4]
yaml.full_load()方法获取 YAML 文档,对其进行解析并生成相应的 Python 对象。

full_load()请注意,不建议使用具有不受信任输入的方法。

如果您使用不受信任的数据,请改用该yaml.safe_load()方法。

# 额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: