给出特定范围的列表切片

时间:2017-05-22 17:32:38

标签: python list indexing slice

首先感谢您看到这个问题,并且请,这是解决此问题的简单方法。 我有两个列表,我称之为v1和v2,它们有不同的范围:

250-1100和900 1700

我想在900-950范围内切片。因此,他们应该将他们的劣质部分切成最小值为900,并将上部切成最大值为950.

  

注意:v1和v2用双索引[i] [0]引用,因为它们是数据对,我用第一个值切割列表(它们实际上是{x,y}对)。 / p>

我有这个方法,我用来处理它:

def corte(v1, v2):  
    for i in range(len(v1)):
        if i == 0 and v1[0][0] == v2[0][0]:
            break
        if v1[i][0] >= v2[0][0]:
            v1 = v1[i:]
            break

    if i == len(v2) and v1[-1][0] == v2[-1][0]:
        return v1, v2

    if v1[-1][0] > v2[-1][0]:
        i = len(v1)
        while i > 0:
            i -= 1  
            if v1[i - 1][0] <= v2[-1][0]:
                v1 = v1[:i]
                break
    else:
        i = len(v2)
        while i > 0:
            i -= 1  
            if v2[i - 1][0] <= v1[-1][0]:
                v2 = v2[:i + 1]
                break
    return v1, v2

我最大的问题是处理这个范围的事情。我知道这太难理解了,这个问题可能看起来有点令人困惑,所以我要问的是一些建议,也许你认为我应该尝试做得更好。

  

实施例

     

V1 = [[899.1,0],[900,0],[900.1,0],[920.0,0],[949.1,0],[950.1,0]]

     

V2 = [[935,0],[945,0],[955,0]]

     
    

将返回v = [900,0],[900.1,0],[920.0,0],[935,0],[945,0],[949.1,0]

  

第二个元素与问题无关。

编辑:实际上这段代码没有按照900-950范围进行切片,当我将一个列表的边缘与另一个列表的边缘匹配时,它会删除多余的值。

3 个答案:

答案 0 :(得分:1)

您需要输入和输出所需的具体示例,但我认为您需要列表理解。例如,这将返回v1中的值,其中该对的第一个元素在900-950范围内。

[pair for pair in v1 if 900 <= pair[0] <= 950]

答案 1 :(得分:1)

如果您的目标是根据元素的某些部分(例如element[0])的值提取元素的子范围,请执行以下操作:

sublist1 = list(filter((lambda elt: 900 <= elt[0] <= 950), v1))

同样适用于v2

答案 2 :(得分:1)

我想这会解决问题:

v1=[[899.1,0],[900,0],[900.1,0],[920.0,0],[949.1,0],[950.1,0]]
v2=[[935,0],[945,0],[955,0]]
v3 = v1+v2
v3.sort(key=lambda x: x[0])
final_list = [x for x in v3 if x[0]>900 and x[0]<950]
print(final_list)

1)要合并两个列表,只需添加它们就是最好的方法

  

list3 = list1 + list2

2)通过将键指定为列表的第一个元素

来对列表进行排序
  

list_name.sort(key = lambda x:x [0])

3)列表理解。

  

[x,如果x [0]> 900且x [0] <950]则v3中的x

如果x [0](列表列表的第一个元素)大于900且小于950,则在v3(列表列表)中为每个x(此处为列表)存储x。