我有来自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
中的值list1
为index=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])
非常感谢你!
答案 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