Python 定期对列表/数组进行切片
假设我有一个Python 定期对列表/数组进行切片,python,numpy,Python,Numpy,假设我有一个a=range(1,51)。如何切片a以创建如下所示的新列表: [1,2,3,11,12,13,21,22,23,31,32,33,41,42,43] 有没有一种pythonic方法可以帮助我在不使用编写函数的情况下完成这项工作 我知道[start:stop:step]用于定期切片一个元素,但我不确定是否遗漏了一些明显的内容 编辑:建议的重复问题/答案与我的问题/答案不同。我只是要求定期从较大的列表/数组中切片/提取元素。建议的副本修改现有数组的元素。您想要的比简单的切片更复杂,因
a=range(1,51)
。如何切片a
以创建如下所示的新列表:
[1,2,3,11,12,13,21,22,23,31,32,33,41,42,43]
有没有一种pythonic方法可以帮助我在不使用编写函数的情况下完成这项工作
我知道[start:stop:step
]用于定期切片一个元素,但我不确定是否遗漏了一些明显的内容
编辑:建议的重复问题/答案与我的问题/答案不同。我只是要求定期从较大的列表/数组中切片/提取元素。建议的副本修改现有数组的元素。您想要的比简单的切片更复杂,因此需要某种(可能相当简单的)函数来完成。我将考虑使用
zip
组合多个片段,例如:
a[(a - 1) % 10 < 3]
# array([ 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43])
reduce(lambda,b:a+b,map(list,zip(a[1::10],a[2::10],a[3::10]))
给定:
>>> li=range(1,52)
你可以做:
>>> [l for sl in [li[i:i+3] for i in range(0,len(li),10)] for l in sl]
[1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43, 51]
或者,如果只需要完整的子列表:
>>> [l for sl in [li[i:i+3] for i in range(0,len(li),10)] for l in sl if len(sl)==3]
[1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
>>> [l for sl in [li[i:i+3] for i in range(0,len(li),10)] for l in sl]
[1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
或者,鉴于:
>>> li=range(1,51)
然后,您不需要测试子列表:
>>> [l for sl in [li[i:i+3] for i in range(0,len(li),10)] for l in sl if len(sl)==3]
[1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
>>> [l for sl in [li[i:i+3] for i in range(0,len(li),10)] for l in sl]
[1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
另一个选项是逻辑向量子集,类似于:
a[(a - 1) % 10 < 3]
# array([ 1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43])
a[(a-1)%10<3]
#数组([1,2,3,11,12,13,21,22,23,31,32,33,41,42,43])
(a-1)%10
按10(周期)查找数组的剩余部分;而(a-1)%10<3
给出了一个逻辑向量,它为每十个元素中的前三个元素提供了真值。Psidom的答案的索引数学也可以适用于列表理解
a = range(1,51)
[n for n in a if (n - 1) % 10 < 3]
Out[23]: [1, 2, 3, 11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
a=范围(1,51)
[n表示if(n-1)%10<3中的n]
Out[23]:[1,2,3,11,12,13,21,22,23,31,32,33,41,42,43]
您需要使用列表理解谢谢。固定的。这是一个大脑fa#t.可能重复的可能重复(相同的事情只有操作数是数组而不是列表,但这里有numpy
tag)需要注意的一点是,这只适用于numpy.array。python列表类型不适用于此项。@请更正。OP标记了numpy
,所以我假设这里是numpy数组。但它是辉煌和优雅的。。。我为什么没想到呢0:(:)如果numpy==True:选择(此答案)
score+=1