用定义的值替换列表中的元素-Python

时间:2019-09-18 11:57:27

标签: python list

我有一个这样的列表:

L = [[0, 0, 1, 0, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 1]]

信息:

print(type(L))
print(type(L[0]))
print(type(L[0][0]))
<class 'list'>
<class 'list'>
<class 'int'>

我想得到这个结果:

L = [[' ', ' ', '*', ' ', ' '],[' ', '*', '*', '*', ' '], ['*','*','*','*',]]

现在列表的元素是chr

有没有很好的方法可以做到这一点?我当然可以使用fors和iterators,但是我正在寻找更流畅的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用嵌套列表推导来生成保留嵌套结构的新列表,使用if / else语句用*或相应的空格填充它:

L = [[0, 0, 1, 0, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 1]]

[['*' if i else ' ' for i in l] for l in L]

[[' ', ' ', '*', ' ', ' '],
 [' ', '*', '*', '*', ' '],
 ['*', '*', '*', '*', '*']]

答案 1 :(得分:0)

对于具有两个以上值的更一般的情况,

>>> L = [[0, 0, 1, 0, 0], [0, 1, 2, 1, 0], [1, 2, 3, 2, 1]]    

您还可以使用字典,将源元素映射到目标元素...

>>> d = {0: " ", 1: "*", 2: "**", 3: "***"}
>>> [[d[x] for x in l] for l in L]
[[' ', ' ', '*', ' ', ' '],
 [' ', '*', '**', '*', ' '],
 ['*', '**', '***', '**', '*']]

...或执行相同操作的函数(结果相同)

>>> f = lambda n: ("*" * n) if n else " "
>>> [[f(x) for x in l] for l in L]