我有一个python程序打印出一些由其他python程序创建的列表,格式为:
[0, [], 0, 1, [], 1]
我想将0和1改为字母,即在上面的输入中,我希望有
[x, [], x, y, [], y]
作为输出
到目前为止,我执行此操作的代码如下:
for x in search.Search(s, s.run()):
if x == 0:
return x
elif x == 1
return y
我知道我错过了什么,但我不太清楚:(
答案 0 :(得分:4)
使用列表理解:
subst = {0: 'x', 1: 'y'}
return [subst.get(v, v) if v else v for v in search.Search(s, s.run()]
使用return
可以提前退出循环。
if v else v
有助于避免尝试将空列表用作键(这会引发TypeError;列表不可清除,因此不允许作为键)。另一种策略是:
from collections import Hashable
subst = {0: 'x', 1: 'y'}
hashable = lambda v: isinstance(v, Hashable)
return [subst.get(v, v) if hashable(v) else v for v in search.Search(s, s.run()]
subst
地图更容易扩展;但是使用函数来映射值(在Jacob's answer中使用)可能对您更具可读性。
答案 1 :(得分:3)
返回中断执行,你可能想要这样的东西
def switch_letter(x):
if x == 0:
return 'x'
if x == 1:
return 'y'
return x
my_letters = [switch_letter(x) for x in search.Search(s, s.run())]
答案 2 :(得分:1)
这个答案类似于Martjin的回答。也许你可以试试这个。但它适用于python> 2.4
>>> a=[0, [], 0, 1, [], 1]
>>> s={0:'x',1:'y'}
>>> [x if isinstance(x,list) else s.get(x,'') for x in a]
['x', [], 'x', 'y', [], 'y']
答案 3 :(得分:0)
python 3.2
a= [0, [], 0, 1, [], 1]
b={0:"x",1:"y"}
result=[b[i] if isinstance(i,int) else [] for i in a]
2. [i if isinstance(i,list) else b[i] for i in a ]
答案 4 :(得分:0)
我认为内置函数映射对于非python程序员来说比列表压缩更简洁,更简单。
def sust(item):
if item == 0:
return "x"
if item == 1:
return "y"
return item
output = map(sust, search.Search(s, s.run()))
答案 5 :(得分:-2)
生成器允许if-else语句在里面。在这种情况下,您的代码将会显示下一步。
['y' if i else 'x' for i in search.Search(s, s.run()]