python - 如何递归调用python中的函数将列表中的每个元素拖到底部?

标签 python python-3.x list recursion

例如,如果我原来的嵌套列表是:

[[' ', '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/

相关文章:

python - 在 Pandas 中添加日期

python - 针对 lexsort : Permutation for sorting each column independently when considering yet another vector 的二维数组广播一维数组

python - 如何将 Python Flask 应用程序部署到在 Amazon Linux EC2 实例上运行的 Apache (Httpd)

python - 将图像作为灰度导入并将其转换为灰度在乘以 255 时不会产生相同的结果

r - 如何创建一个新列表,其中包含 R 中旧列表中的每个单独的矩阵列?

r - 子集 R 中的列表向量

python-3.x - TensorFlow 1.9是否支持Python 3.7

python - 在 Tensorflow 2 中为类 Model(object) 创建检查点

python - 如何将辅助Python文件上传到谷歌云平台?

python - 从键列表中获取字典中的所有值,其中相同的键多次出现