我有一个这样的列表:
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,但是我正在寻找更流畅的东西。
答案 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]