例如,如果我原来的嵌套列表是:
[[' ', 'Y', ' ', 'X'],
['S', ' ', 'V', ' '],
['T', 'X', 'Y', 'S'],
['X', ' ', 'X', 'Y']]
我希望结果是:
[[' ', ' ', ' ', ' '],
['S', ' ', 'V', 'X'],
['T', 'Y', 'Y', 'S'],
['X', 'X', 'X', 'Y']]
所以基本上将所有字母放到底部,而不删除任何空格并保持列表的结构。
这是我到目前为止所拥有的。 我的结果给了我这个,这是不正确的。
[[' ', ' ', ' ', ' '],
['S', 'Y', 'V', 'X'],
['T', ' ', 'Y', 'S'],
['X', 'X', 'X', 'Y']]
def find_letters(m,constant):
try:
for i in range(len(m[constant])):
if m[constant][i] == ' ':
if m[constant - 1][i] != ' ':
m[constant][i] = m[constant - 1][i]
m[constant - 1][i] = ' '
find_letters(m,constant - 1)
except IndexError:
pass
l = [[' ', 'Y', ' ', 'X'],
['S', ' ', 'V', ' '],
['T', 'X', 'Y', 'S'],
['X', ' ', 'X', 'Y']]
constant = -1
(find_letters(l,constant))
最佳答案
你可以试试这个。
您需要将每列中的所有 ' '
向上推,并将所有其他字符向下保持顺序。您可以在此处使用sorted()
。
a=[[' ', 'Y', ' ', 'X'],
['S', ' ', 'V', ' '],
['T', 'X', 'Y', 'S'],
['X', ' ', 'X', 'Y']]
out=list(zip(*[sorted(lst,key=lambda x: x==' ',reverse=True) for lst in zip(*a)]))
''' [(' ', ' ', ' ', ' '),
('S', ' ', 'V', 'X'),
('T', 'Y', 'Y', 'S'),
('X', 'X', 'X', 'Y')]'''
关于python - 如何递归调用python中的函数将列表中的每个元素拖到底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60500849/