使用连续数字将列表向左和向右扩展到总长度的 50%
Posted
技术标签:
【中文标题】使用连续数字将列表向左和向右扩展到总长度的 50%【英文标题】:Extend the list to left and right upto 50 percent of total length with continuous numbers 【发布时间】:2020-03-24 18:01:33 【问题描述】:我的列表很少,
l1=[8,9,10,11,12,13]
l2=[25,26,27,28,29]
现在我想用连续数字以两种方式扩展列表(右侧长度的 50% 和左侧长度的 50%)。
所以输出列表看起来像,
l1=[5,6,7,8,9,10,11,12,13,14,15,16]
l2=[23,24,25,26,27,28,29,30,31]
我可以使用 for 循环来做到这一点,但是我正在寻找任何 python 快捷方式。
【问题讨论】:
for 循环有什么问题? 【参考方案1】:如果您的列表是整数的有序列表,您可以执行以下操作:
l = [25,26,27,28,29]
length_l = len(l)
while len(l) < 2*length_l:
l = [l[0]-1] + l + [l[-1]+1]
print(l)
# > [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
但可以通过使用range
再次生成列表来完成,如下所示:
l = [8,9,10,11,12,13]
l = list(range(l[0]-len(l)//2, l[-1]+len(l)//2+1))
print(l)
# > [23, 24, 25, 26, 27, 28, 29, 30, 31]
【讨论】:
【参考方案2】:创建一个辅助函数来添加缺失的部分:
l1=[8,9,10,11,12,13]
l2=[25,26,27,28,29]
def plusFifty(data):
"""Adds half the lists length worth of numbers to the begin and end of the list,
decrementing from the first value and incrementing from the last value."""
len_halfed = len(data) // 2
r = range(len_halfed) # 0 ... len//2-1
# now splice two list comps with the original list
return [data[0]-diff-1 for diff in r][::-1]+data+[data[-1]+diff+1 for diff in r]
print( plusFifty(l1))
print( plusFifty(l2))
输出
[5, 6, 7, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16]
[23, 24, 25, 26, 27, 28, 29, 29, 30, 31]
【讨论】:
以上是关于使用连续数字将列表向左和向右扩展到总长度的 50%的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 9 中使用向上、向下、向左和向右箭头键导航动态输入和选择表内的字段?