import ast
input_str = input()
start = input_str.find("[")
end = input_str.find("]",start)
list_str = input_str[start:end+1]#注意要包含[]确保它是一个有效的Python列表字符串。这样,ast.literal_eval() 将正确地返回一个列表对象。
prices = ast.literal_eval(list_str)
find()
方法在Python中用于在字符串中查找子字符串的索引位置。如果找到了子字符串,它会返回子字符串第一次出现的索引;如果没有找到,它会返回 -1
。
下面是 find()
方法的一些基本用法:
基本用法
# 定义一个字符串
s = "hello world"
# 查找子字符串 "world" 的索引
index = s.find("world")
print(index) # 输出: 6
# 查找子字符串 "python" 的索引
index = s.find("python")
print(index) # 输出: -1,因为 "python" 不在字符串中
查找子字符串的起始和结束位置
你可以指定 find()
方法的第二个和第三个参数来定义查找的起始和结束位置。
# 定义一个字符串
s = "hello world"
# 从索引 3 开始查找 "l"
index = s.find("l", 3)
print(index) # 输出: 3
# 从索引 3 开始,到索引 7 结束查找 "lo"
index = s.find("lo", 3, 7)
print(index) # 输出: 3
# 从索引 3 开始,到索引 5 结束查找 "lo"
index = s.find("lo", 3, 5)
print(index) # 输出: 3
注意事项
find()
方法是区分大小写的。- 如果你需要进行不区分大小写的查找,你可以先将字符串转换为全小写或全大写,然后再使用
find()
方法。
# 定义一个字符串
s = "Hello World"
# 将字符串转换为小写后查找 "hello"
index = s.lower().find("hello")
print(index) # 输出: 0
使用 find()
方法可以方便地在字符串中查找子字符串的位置,这对于处理文本数据非常有用。
ast.literal_eval()
是 Python 的 ast
模块中的一个函数,它用于安全地解析字符串形式的 Python 字面量表达式,并返回对应的 Python 对象。它比 eval()
函数更安全,因为它只会解析 Python 字面量结构,不会执行任何代码。
以下是 ast.literal_eval()
的一些常见用法:
解析字符串为基本数据类型
- 字符串:返回字符串本身。
- 数字:将字符串形式的整数、浮点数或复数转换为相应的数字类型。
- 元组:将字符串形式的元组转换为元组对象。
- 列表:将字符串形式的列表转换为列表对象。
- 字典:将字符串形式的字典转换为字典对象。
- 布尔值:将字符串
"True"
或"False"
转换为布尔值True
或False
。
基本用法
import ast
# 解析字符串为整数
num_str = '123'
num = ast.literal_eval(num_str)
print(num) # 输出: 123
# 解析字符串为浮点数
float_str = '123.456'
float_num = ast.literal_eval(float_str)
print(float_num) # 输出: 123.456
# 解析字符串为布尔值
bool_str = 'True'
bool_val = ast.literal_eval(bool_str)
print(bool_val) # 输出: True
# 解析字符串为列表
list_str = '[1, 2, 3]'
lst = ast.literal_eval(list_str)
print(lst) # 输出: [1, 2, 3]
# 解析字符串为字典
dict_str = "{'key': 'value'}"
dict_val = ast.literal_eval(dict_str)
print(dict_val) # 输出: {'key': 'value'}
# 解析字符串为元组
tuple_str = "(1, 2, 3)"
tuple_val = ast.literal_eval(tuple_str)
print(tuple_val) # 输出: (1, 2, 3)
注意事项
- 安全性:
ast.literal_eval()
比eval()
更安全,因为它不会执行任何代码,只解析字面量。 - 错误处理:如果字符串不是有效的字面量表达式,
ast.literal_eval()
会抛出ValueError
或SyntaxError
。 - 性能:虽然
ast.literal_eval()
比eval()
安全,但它的性能通常比eval()
差,因为它需要解析和构建抽象语法树。
错误处理
import ast
try:
result = ast.literal_eval("some invalid expression")
except (ValueError, SyntaxError) as e:
print("解析错误:", e)
使用 ast.literal_eval()
时,最好使用 try-except 块来捕获可能的解析错误。
总结
ast.literal_eval()
是一个强大的工具,用于安全地将字符串形式的 Python 字面量表达式转换为相应的 Python 对象。它在处理来自外部的数据时非常有用,可以避免使用不安全的 eval()
函数。