-3

フォームのリストがあります

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リストで複数の反復を行い、要素を結合して、反復後にリスト内の要素の数が変化しなくなるまで続けます。これをよりPython的な方法で達成するにはどうすればよいですか?

4

2 に答える 2

1

numpyを使用した1行のものを意味しましたか? :)

次のショートカットを試してください。

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() 

EDIT
リストを使用した別のオプション:

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)]
于 2018-03-27T12:54:48.820 に答える