iT邦幫忙

0

python list 尋找元素是否大於給的值 卻得到錯誤

        if index % 50 == 0:           
            compare(target_item_list,target_item_list3) 
print(target_item_list3)

[0.108, 0.108, 0.111, 0.11, 0.108, 0.109, 0.109, 0.115, 0.113, 0.109, 0.11, 0.11, 0.109, 0.108, 0.113, 0.111, 0.254, 0.255, 0.923, 0.108, 0.108, 0.108, 0.108, 0.108, 0.109, 0.109, 0.108, 0.111, 0.111, 0.109, 0.108, 0.108, 0.108, 0.111, 0.11, 0.108, 0.109, 0.109, 0.115, 0.113, 0.109, 0.11, 0.11, 0.109, 0.108, 0.113, 0.111, 0.254, 0.255, 0.923, 0.108, 0.108, 0.108, 0.108, 0.108, 0.109, 0.109, 0.108, 0.111, 0.111, 0.109, 0.108, 0.11, 0.112, 0.108, 0.111, 0.111, 0.109, 0.109, 0.252, 0.251, 0.253, 0.251, 0.114, 0.109, 0.128, 0.143, 0.153, 0.149, 0.147, 0.141, 0.133, 0.113, 0.116, 0.109]

但當我加入

            compare(target_item_list,target_item_list3)
            max_item = max(target_item_list3)
            max_item_idx = target_item_list3.index(max_item)
            target_item_list2.append(target_item_list3[max_item_idx-1:max_item_idx+3])

想找最他時他卻告訴我
max() arg is an empty sequence
為什麼 裡面不是已經放入大於0.108了嗎

def compare(list1,list2):
    for x in list1:
        if x < 0.108: #這段改成>0.108 卻可以正常不會出現max() arg is an empty sequence但我要的並不是小於0.108的
             continue
        list2.append(x)

是我哪個環節有問題嗎?

froce iT邦大師 5 級 ‧ 2018-09-10 13:49:41 檢舉
看不懂你compare裡參數多個list2要幹嘛用的。

2 個回答

0
froce
iT邦大師 5 級 ‧ 2018-09-10 14:13:09
最佳解答

因為看不懂你compare裡面幹嘛要兩個list,尤其是list2。
如果你list2是設個全域變數的話,最好不要這麼搞。
建議等你函數得到結果後,再對全域變數做變動。

只是要過濾出大於0.108的話很簡單,一行就解決了。

data = [0.108, 0.201, 0.001]
data_gt = [x for x in data if x > 0.108]
hoolada iT邦新手 5 級 ‧ 2018-09-10 23:17:32 檢舉

compare 我改太多一子以為是我用錯了改道有點頭昏了,所以改到有點癡呆了 哈哈 我後來找到問題了 原來我第一個它會讀出一個空白再來讀取 if (index+1) %50 == 0: 多一個+1就可以了!!!

0
一級屠豬士
iT邦新手 2 級 ‧ 2018-09-10 14:24:09
list1 = [0.108, 0.108, 0.111, 0.11, 0.108, 0.109, 0.109, 0.115, 0.113, 0.109, 
0.11, 0.11, 0.109, 0.108, 0.113, 0.111, 0.254, 0.255, 0.923, 0.108, 0.108, 0.108, 
0.108, 0.108, 0.109, 0.109, 0.108, 0.111, 0.111, 0.109, 0.108, 0.108, 0.108, 0.111, 
0.11, 0.108, 0.109, 0.109, 0.115, 0.113, 0.109, 0.11, 0.11, 0.109, 0.108, 0.113, 
0.111, 0.254, 0.255, 0.923, 0.108, 0.108, 0.108, 0.108, 0.108, 0.109, 0.109, 
0.108, 0.111, 0.111, 0.109, 0.108, 0.11, 0.112, 0.108, 0.111, 0.111, 0.109, 
0.109, 0.252, 0.251, 0.253, 0.251, 0.114, 0.109, 0.128, 0.143, 0.153, 0.149, 
0.147, 0.141, 0.133, 0.113, 0.116, 0.109]

list2 = list(filter(lambda x: x < 0.108, list1))
list3 = list(filter(lambda x: x >= 0.108, list1))

print(len(list1), len(list2), len(list3))
print(list2)
print(list1 == list3)

https://ithelp.ithome.com.tw/upload/images/20180910/20092833IbDDJLq6VA.png

froce iT邦大師 5 級 ‧ 2018-09-10 14:39:30 檢舉

其實陣列推導式執行速度稍微比filter快,語意也比較清楚,所以我後來都用陣列推導式。

hoolada iT邦新手 5 級 ‧ 2018-09-11 03:38:37 檢舉

感恩 一級屠豬士

我要發表回答

立即登入回答