从 List 生成相邻元素
Generate adjacent elements from List
我想从列表中生成连续滑动window
nums = [1,2,3,4,10]
####O/P
[[1, 2], [2, 3], [3, 4], [4, 10]]
到目前为止我的代码 -
>>> num_list = [1,2,3,4,10]
>>>
>>> res = []
>>> n = len(num_list)
>>>
>>> for i in range(n):
... imm = []
... for j in range(i,i+1):
... imm += [num_list[i], num_list[j]]
... res += [imm]
...
>>> res
[[1, 1], [2, 2], [3, 3], [4, 4], [10, 10]]
我是 python 的初学者,num_list
只是实际列表的一小部分,它更长
您要实现的目标是 sliding window
你可以尝试下面的函数,它也将你的时间复杂度从 O(N^2) 降低到 O(N)
其他资源
l = [1,2,3,4,10]
def divide_chunks_contigious(in_arr,chunk):
n = len(in_arr)
i = 0
while i + chunk <= n:
i += 1
yield in_arr[i-1:i+chunk-1]
>>> list(divide_chunks_contigious(l,2))
[[1, 2], [2, 3], [3, 4], [4, 10]]
您的代码的问题也可以通过从 i+1
到 i+2
初始化 j
来解决,但是在长序列上它会更慢
for i in range(n-1):
imm = []
for j in range(i+1,i+2):
imm += [num_list[i],num_list[j]]
res += [imm]
>>> res
[[1, 2], [2, 3], [3, 4], [4, 10]]
在你的代码中第二个 for 循环
for j in range(i, i+1):
print(j)
# j = i
这就是为什么你的结果不正确你可以使用下面的代码
n = [1,2,3,4,5]
ans = []
for i in range(len(n)-1):
ans.append([n[i], n[i+1]])
print(ans)
# ans = [[1,2], [2,3],[3,4],[4,5]]
您可以使用 zip
通过传递原始列表和偏移 1 的列表切片来创建列表中连续对的列表:
list(zip(num_list, num_list[1:]))
我想从列表中生成连续滑动window
nums = [1,2,3,4,10]
####O/P
[[1, 2], [2, 3], [3, 4], [4, 10]]
到目前为止我的代码 -
>>> num_list = [1,2,3,4,10]
>>>
>>> res = []
>>> n = len(num_list)
>>>
>>> for i in range(n):
... imm = []
... for j in range(i,i+1):
... imm += [num_list[i], num_list[j]]
... res += [imm]
...
>>> res
[[1, 1], [2, 2], [3, 3], [4, 4], [10, 10]]
我是 python 的初学者,num_list
只是实际列表的一小部分,它更长
您要实现的目标是 sliding window
你可以尝试下面的函数,它也将你的时间复杂度从 O(N^2) 降低到 O(N)
其他资源
l = [1,2,3,4,10]
def divide_chunks_contigious(in_arr,chunk):
n = len(in_arr)
i = 0
while i + chunk <= n:
i += 1
yield in_arr[i-1:i+chunk-1]
>>> list(divide_chunks_contigious(l,2))
[[1, 2], [2, 3], [3, 4], [4, 10]]
您的代码的问题也可以通过从 i+1
到 i+2
初始化 j
来解决,但是在长序列上它会更慢
for i in range(n-1):
imm = []
for j in range(i+1,i+2):
imm += [num_list[i],num_list[j]]
res += [imm]
>>> res
[[1, 2], [2, 3], [3, 4], [4, 10]]
在你的代码中第二个 for 循环
for j in range(i, i+1):
print(j)
# j = i
这就是为什么你的结果不正确你可以使用下面的代码
n = [1,2,3,4,5]
ans = []
for i in range(len(n)-1):
ans.append([n[i], n[i+1]])
print(ans)
# ans = [[1,2], [2,3],[3,4],[4,5]]
您可以使用 zip
通过传递原始列表和偏移 1 的列表切片来创建列表中连续对的列表:
list(zip(num_list, num_list[1:]))