Python:给定值的Slice / Cut 3数组

时间:2014-07-03 11:24:13

标签: python python-2.7

我有来自float64类型的3个列表。如果list1中出现给定值,我想剪切list1。对于这个给定的值,我想在list1中找到索引并切断list2,list3(在此索引之后)。我做了什么:

list1 = array([1.99, 3.34, 5.3, 6.121, 7.5, 9.001, 8.1011, 9.089])

list2 = array([15.09, 14.112, 11.09, 9.01, 7, 3.21, 2, 1])

list3 = array([1.5, 3, 5.4, 6.2, 7.5, 9, 10.3, 11.5])

for i,v in enumerate(list1):
    if v> 6.121 in list1:
        list1 = list1[0:i]
        list2 = list2[0:i]
        list3 = list3[0:i]

print list1,list2,list3

此代码仅在list1中存在给定值时才有效。 我想得到:

如果v > 7中的值list1index=4,则在索引3之后剪切list1,list2,list3

输出应为:

    list1 = array([1.99, 3.34, 5.3, 6.121])

    list2 = array([15.09, 14.112, 11.09, 9.01])

    list3 = array([1.5, 3, 5.4, 6.2])

非常感谢你!

5 个答案:

答案 0 :(得分:1)

你很亲密,但是

if v > 6.121 in list1:

没有任何意义,一旦找到要切片的索引,就应该break。一个简单列表的演示:

>>> list1 = [1.99, 3.34, 5.3, 6.121, 7.5, 9.001, 8.1011, 9.089]
>>> list2 = [15.09, 14.112, 11.09, 9.01, 7, 3.21, 2, 1]
>>> list3 = [1.5, 3, 5.4, 6.2, 7.5, 9, 10.3, 11.5]
>>> for i, v in enumerate(list1):
    if v > 7:
        list1 = list1[0:i]
        list2 = list2[0:i]
        list3 = list3[0:i]
        break


>>> list1
[1.99, 3.34, 5.3, 6.121]
>>> list2
[15.09, 14.112, 11.09, 9.01]
>>> list3
[1.5, 3, 5.4, 6.2]

答案 1 :(得分:0)

解决问题的不同方法是:

list1 = [x for x in list1 if x <= 6.121]
length = len(list1)
list2 = list2[:length]
list3 = list3[:length]

答案 2 :(得分:0)

假设你正在使用numpy:

list1 = list1[list1 <= 6.121]
sli = len(list1)
list2 = list2[:sli]
list3 = list3[:sli]

print list1,list2,list3
[ 1.99   3.34   5.3    6.121] [ 15.09   14.112  11.09    9.01 ] [ 1.5  3.   5.4  6.2]

由于您的数组未排序,您可以使用itertools.takewhile

from itertools import takewhile
value = 6.121
sli = len(list(takewhile(lambda x: x <= value,list1)))
list1 =list1[:sli]
list2 = list2[:sli]
list3 = list3[:sli]

print list1,list2,list3
[ 1.99   3.34   5.3    6.121] [ 15.09   14.112  11.09    9.01 ] [ 1.5  3.   5.4  6.2]

答案 3 :(得分:0)

什么是阵列?

反正:

condition = lambda n: n > 7
if condition(max(list1)):
  list1 = filter(condition, list1)
  list2 = filter(condition, list2)
  list3 = filter(condition, list3)

在函数中更通用:

def trimArray(threshold, *lists):
    condition = lambda n: n > threshold
    if len(lists) > 0 and condition(max(lists[0])):
        for l in lists:
            l[:] = filter(condition, l)

答案 4 :(得分:0)

@lara list1,list2和list3是numpy数组而不是list :)。试试这个:

for i,v in enumerate(list1):
    if v > 7:
        list1 = list1[0:i]
        if len(list2) > i:
            list2 = list2[0:i]
        if len(list3) > i:
            list3 = list3[0:i]
        break