如何将数字中的python列表转换为字母?

时间:2012-12-21 12:07:41

标签: python list for-loop

我有一个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

我知道我错过了什么,但我不太清楚:(

6 个答案:

答案 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()]