将 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 文字的
字符串。
或者,您可以使用该str.strip()
方法删除括号。
使用 strip() 将 List 的字符串表示形式转换为 List
这是一个三步过程:
- 使用
str.strip()
方法删除括号。 - 在每个逗号上拆分字符串。
- 或者,将每个列表元素转换为整数。
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()
方法。
# 额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: