合并列表列表中的元素 python
Combine elements within list of lists python
我有一个表单列表
in_list = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]
并且我需要将在最后一个位置和第一个位置包含连续整数的连续列表组合成列表。所以
if in[1][0] = in[0][1] + 1:
out[0] = [in[0][0],in[1][1]]
输出的形式为
out_list = [[10,30], [35, 40], [45,55]]
现在,我的代码在 out 列表上进行了多次迭代并组合了元素,一直持续到列表中的元素数量在一次迭代后停止变化。我怎样才能以更 pythonic 的方式实现这一目标?
您是说 one-line 使用 numpy 的东西吗? :)
尝试以下快捷方式:
import numpy as np
# data is of shape (n,2), n=6
data = np.array([[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]])
# seek for consecutive numbers
marks = (data[:-1,1]+ 1) == data[1:,0]
# re-arrange and return to python lists
output = np.stack([data[:-1,0][marks],data[1:,1][marks]],axis=1).tolist()
编辑:
另一个使用列表的选项:
data = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]
mylist = []
def func(x1,x2):
if x1[1] +1 == x2[0]:
mylist.append((x1[0],x2[1]))
list(map(func,data[:-1],data[1:]))
print(mylist)
输出:
[(10, 21), (16, 25), (22, 30), (45, 55)]
这应该可以解决问题
out = [inp[0]]
for l in inp[1:]:
if l[0] == out[-1][1] + 1:
out[-1][1] = l[1]
else:
out.append(l)
我有一个表单列表
in_list = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]
并且我需要将在最后一个位置和第一个位置包含连续整数的连续列表组合成列表。所以
if in[1][0] = in[0][1] + 1:
out[0] = [in[0][0],in[1][1]]
输出的形式为
out_list = [[10,30], [35, 40], [45,55]]
现在,我的代码在 out 列表上进行了多次迭代并组合了元素,一直持续到列表中的元素数量在一次迭代后停止变化。我怎样才能以更 pythonic 的方式实现这一目标?
您是说 one-line 使用 numpy 的东西吗? :)
尝试以下快捷方式:
import numpy as np
# data is of shape (n,2), n=6
data = np.array([[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]])
# seek for consecutive numbers
marks = (data[:-1,1]+ 1) == data[1:,0]
# re-arrange and return to python lists
output = np.stack([data[:-1,0][marks],data[1:,1][marks]],axis=1).tolist()
编辑:
另一个使用列表的选项:
data = [[10, 15], [16,21], [22,25], [26,30], [35,40], [45,50],[51,55]]
mylist = []
def func(x1,x2):
if x1[1] +1 == x2[0]:
mylist.append((x1[0],x2[1]))
list(map(func,data[:-1],data[1:]))
print(mylist)
输出:
[(10, 21), (16, 25), (22, 30), (45, 55)]
这应该可以解决问题
out = [inp[0]]
for l in inp[1:]:
if l[0] == out[-1][1] + 1:
out[-1][1] = l[1]
else:
out.append(l)