Python 从列表列表中获取边框元素
我正在寻找一种简洁的方法,从列表中获取所有边框元素的列表(解释如下),而不使用任何外部包(例如Python 从列表列表中获取边框元素,python,python-3.x,list,Python,Python 3.x,List,我正在寻找一种简洁的方法,从列表中获取所有边框元素的列表(解释如下),而不使用任何外部包(例如numpy) 定义:边界元素 边框元素可以是: 第一个或最后一个列表中的元素 列表的第一个或最后一个元素 例子 假设以下列表: a = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ] 预期产量 预期的输出是边界元素的列表,顺序并没有真正起作用。因此,以下是一个有效的结果: [1, 2
numpy
)
定义:边界元素
边框元素可以是:
- 第一个或最后一个列表中的元素
- 列表的第一个或最后一个元素
a = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]
预期产量
预期的输出是边界元素的列表,顺序并没有真正起作用。因此,以下是一个有效的结果:
[1, 2, 3, 4, 13, 14, 15, 16, 5, 9, 8, 12]
当前方法
目前我正在做以下工作:
border = a[0] + a[-1] + [x[0] for x in a[1:-1]] + [x[-1] for x in a[1:-1]
# [1, 2, 3, 4, 13, 14, 15, 16, 5, 9, 8, 12]
代码运行得很好,但我想知道是否有更紧凑的形式?特别是,我觉得这两种列表理解(从第二个到最后第二个列表中获取第一个和最后一个元素)可以结合使用。试试这个
列表理解
:
a= [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]
border = [item for sublist in [lst if i == 0 or i == len(a)-1 else [lst[0],lst[-1]] for i, lst in enumerate(a)] for item in sublist]
输出:
>>> border
[1, 2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 16]
也许这会让你满意:
[item for sublist in [[i[0], i[-1]] for i in a] + [i[1:-1] for i in [a[0], a[-1]]] for item in sublist]
看看这是一个略短的解决方案
a[0] + a[-1] + [y for x in a[1:-1] for y in [x[0],x[-1]]]
什么是边界元素?请解释边界元素的含义预期的输出是什么?它是怎样的
[1,2,3,4,13,14,15,16,5,8,8,12]
?它不是应该是[1,2,3,4,13,14,15,16,5,8,9,12]
?为什么会有两个8?我要求一个更紧凑的表格。感谢您的回答,但这不符合我的要求。您希望它更短吗?这就是我的要求,是的。为什么不定义一个函数并在那里添加此代码?然后你可以从你的代码中调用这个函数。你的代码看起来会更干净。这不是关于编码风格,而是关于一种紧凑的做事方式。我要求一个更紧凑的表单。感谢您的回答,但这不符合我的要求。更简洁的是:a[0]+a[-1]+[x[i]代表x,而[1:-1]代表(0,-1)]
。但为我指明了正确的方向。