python - 反转列表中的列表
问题描述
我写了下面的函数,如果len(list_of_list)
是偶数,它就可以工作。当它很奇怪时,我会遇到麻烦。当我运行它时,它以一个断言错误结束。当列表列表为奇数时,如何仅反转第一个和最后一个列表索引中的元素,而不是中间的元素?
def flip_diag(list_of_list):
for i in range(int(len(list_of_list) % 2 != 0)):
list_of_list[0][::-1] = reversed(list_of_list[0][::-1])
list_of_list[-1][::-1] = reversed(list_of_list[-1][::-1])
for i in range(int(len(list_of_list) % 2 == 0)):
reversed_list = [elem[::-1] for elem in list_of_list]
return reversed_list
if __name__ == '__main__':
assert flip_diag([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]]) == [[0, 0, 0, 1],[0, 0, 2, 0], [0, 3, 0, 0], [4, 0, 0, 0]]
assert flip_diag([[0, 0, 0], [0, 1, 0], [0, 0, 1]]) == [[0, 0, 0], [0, 1, 0], [1, 0, 0]]
assert flip_diag([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) == [[0, 0, 1], [0, 1, 0], [1, 0, 0]]
assert flip_diag([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) == [[3, 2, 1], [4, 5, 6], [9, 8, 7]]
解决方案
如果 list_of_list 的长度是奇数,您可以使用下面的 for 循环来仅反转 list_of_list 中每个列表的第一个和最后一个索引元素:
>> list_of_list = [[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0]]
>> for i in range(int(len(list_of_list) % 2 != 0)):
>> reversed_list = [elem[-1:-2:-1]+elem[1:-1]+elem[0:1] for elem in list_of_list]
>> print(reversed_list)
[[0, 0, 0, 1], [0, 2, 0, 0], [0, 0, 3, 0]]
如果你想使用map
,lambda
你可以这样做:
>> list_of_list = [[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0]]
>> for i in range(int(len(list_of_list) % 2 != 0)):
>> reversed_list = list(map(lambda elem: elem[-1:-2:-1]+elem[1:-1]+elem[0:1] ,list_of_list))
>> print(reversed_list)
[[0, 0, 0, 1], [0, 2, 0, 0], [0, 0, 3, 0]]
推荐阅读
- python - Python while 循环(范围)
- html - Bootstrap 4 标头/div 定位
- python - 如何确保我的 django 项目使用的是我为它创建的虚拟环境?
- javascript - PDF 格式的 HTML 表格
- flutter - TypeError(类型'String'不是'index'类型'int'的子类型)
- angular - 如何在 Angular 中重置反应性 Angular Material 表单?
- r - 轴标签ggplot2 R中的换行符和上标
- python - google tensorflow 文档有什么问题?
- python - 这是什么错误,为什么会显示?深度学习 MNIST
- javascript - 如何在 React.js 中实现分页?