当我在解释器中键入以下内容时,我得到了所需的输出行为:
>>> x = (7, 2, 1, 1, 6, 2, 1, 2, 1, 2, 2, 6)
>>> y = list(x)
>>> y
[7, 2, 1, 1, 6, 2, 1, 2, 1, 2, 2, 6]
在上面,我只是将一个元组转换为一个列表。然而,当我运行下面的代码时,我得到了一个我不明白的答案。你知道吗
pwm = input("enter PWM: ")
npwm = pwm.replace('),(', ', ')
y = list(npwm)
print(y)
输出:
['(', '7', ',', ' ', '2', ',', ' ', '1', ',', ' ', '1', ',', ' ', '6', ',', ' ', '2', ',', ' ', '1', ',', ' ', '2', ',', ' ', '1', ',', ' ', '2', ',', ' ', '2', ',', ' ', '6', ')']
有人能向我解释一下发生了什么事吗?为什么上面的代码不能产生所需的输出:
[7, 2, 1, 1, 6, 2, 1, 2, 1, 2, 2, 6]
编辑:哇,对大家的帮助我感激不尽!我非常感谢每个人的病人和愿意帮助我的初学者的问题。非常感谢你。下面是我要解决的问题:
pwm = (7, 2, 1, 1),(6, 2, 1, 2),(1, 2, 2, 6)
npwm = pwm.replace('),(',', ').strip('(').strip(')')
y = list(ast.literal_eval(npwm))
print(y)
使用
eval
的安全(限制性更强)替代方法是ast.literal_eval:跑步
收益率
注意这样做可以避免脆弱的(难以阅读的)
replace('),(',',')
,它只在逗号后面没有空格时才起作用。例如(7),(2)
而不是(7), (2)
。你知道吗你不知道数据和源代码之间的区别。pwm将保存您键入的字符串,而不是元组。如果您将一个字符串放入list函数,您将得到一个包含该字符串的单个字符的列表。这就是你的产出。你知道吗
当您对字符串调用
list
时,它会生成一个列表,其中每个字符都是列表中的一项。例如:由于在本例中从
input
返回的数据是一个字符串,因此对其调用list
将生成一个字符列表。你知道吗为了演示,下面是将字符串
'(1, 2, 3)'
转换为列表[1, 2, 3]
的基本方法:有些人建议对
input
返回的字符串使用eval
。尽管这可以满足您的需要,但这是一个非常不好的习惯,因为python会计算用户决定输入的任何表达式(可能是恶意的)。你知道吗另外,正如svenmarnach正确指出的,
input
实现了python2.x中所期望的功能。幸运的是,3.0中已经纠正了这一点,您必须使用它。你知道吗相关问题 更多 >
编程相关推荐