gpt4 book ai didi

python - 从交替的侧面循环列表

转载 作者:IT老高 更新时间:2023-10-28 22:12:49 26 4
gpt4 key购买 nike

给定一个列表

a = [0,1,2,3,4,5,6,7,8,9]

我怎样才能得到

b = [0,9,1,8,2,7,3,6,4,5]

也就是说,产生一个新的列表,其中每个连续的元素都是从原始列表的两侧交替取出的?

最佳答案

>>> [a[-i//2] if i % 2 else a[i//2] for i in range(len(a))]
[0, 9, 1, 8, 2, 7, 3, 6, 4, 5]

解释:
此代码从 a[i//2] 的开头 ( a[-i//2] ) 和结尾 ( a ) 选择数字,交替(if i%2 else)。共len(a)数字被选中,因此即使 len(a) 也不会产生不良影响很奇怪。
[-i//2 for i in range(len(a))]产量 0, -1, -1, -2, -2, -3, -3, -4, -4, -5 ,
[ i//2 for i in range(len(a))]产量 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 ,
i%2False 之间交替和 True ,
所以我们从 a 中提取的索引是:0, -1, 1, -2, 2, -3, 3, -4, 4, -5 .

我对 pythonicness 的评价:
这种单线的好处是它很短并且显示出对称性(+i//2-i//2)。
但不好的是,这种对称性具有欺骗性:
有人可能会认为 -i//2i//2 相同标志翻转。 But in Python, integer division returns the floor结果而不是截断为零。所以-1//2 == -1 .
此外,我发现通过索引访问列表元素的方式比迭代更少。

关于python - 从交替的侧面循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com