[問題] 一次比對list內所有值的方法?

看板Python作者 (= =)時間13年前 (2011/03/10 11:36), 編輯推噓1(1018)
留言19則, 8人參與, 最新討論串1/1
各位板上的先進大家好Orz 小弟最近在學python 語言 剛好碰到一個情況是 要在if的判斷句裡面去判斷list內所有的值是不是等於1 不過list內的個數可能會有變動 所以不能一個一個打出來比較 想請教各位板上的大大們 有沒有方法是可以在if判斷句內直接判斷list內值是不是等於某值的情況呢? 還是就只能另外寫一個function去判斷XD? 非常感謝各位大大們!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.105.206

03/10 11:42, , 1F
if 1 in List: pass
03/10 11:42, 1F

03/10 11:43, , 2F
看錯題意了 抱歉
03/10 11:43, 2F

03/10 11:45, , 3F
for i in List: if i != 1: print('QQ') 請自行換行
03/10 11:45, 3F

03/10 12:35, , 4F
我是想要在一行判斷式內解決,因為有全1與非全1的情況
03/10 12:35, 4F

03/10 12:40, , 5F
import numpy as np; if (np.array(lst)==val).all(): blah
03/10 12:40, 5F

03/10 13:18, , 6F
if ( set(li) == set([1]) ): print 'all 1'
03/10 13:18, 6F

03/10 13:21, , 7F
if(len(filter(lambda x:x!=1, li) )==0): #all 1
03/10 13:21, 7F

03/10 13:25, , 8F
if(len([e for e in li if e!=1]==0)): #all 1
03/10 13:25, 8F

03/10 16:14, , 9F
感謝大大們提供的方式!!!
03/10 16:14, 9F
感謝樓上大大們提供的方式!!! 小弟還有一個問題是 假設list內是有分 [A, B, C, D] 我也是要一行內做判斷是不是都是1 只是判斷的不是A B C D 而是 A.status, B.status, C.status 和 D.status 這個要怎麼辦呢~"~? 該不會 if(len[e.status for e in list if e!=1]==0) 就好了吧XD? 感謝大大們的解答Orz ※ 編輯: ptthidebear 來自: 140.123.105.206 (03/10 16:20)

03/10 17:52, , 10F
不是…
03/10 17:52, 10F

03/10 17:56, , 11F
可參考 #1AuvTBRi 最後應該是 if e.status != 1 前面則沒差
03/10 17:56, 11F

03/11 08:48, , 12F
我耍蠢...Orz 謝謝KSJ大大!
03/11 08:48, 12F

03/12 11:34, , 13F
if all(alist == 1): ... (since python 2.5)
03/12 11:34, 13F

03/12 11:37, , 14F
if all(e.status==1 for e in alist): ...
03/12 11:37, 14F

03/12 22:18, , 15F
樓樓上應該是"if(all(i==1 for i in alist)):"吧?
03/12 22:18, 15F

03/12 22:19, , 16F
all()裡面的必須是iterable, alist==1並不是iterable
03/12 22:19, 16F

03/15 08:42, , 17F
XD... 多謝樓上指正,我是numpy用太習慣了
03/15 08:42, 17F

03/17 13:26, , 18F
雖然方法不少,但就題意來說,用all是比較直覺且可讀
03/17 13:26, 18F

03/24 23:06, , 19F
if all(li)==1:print 'all 1'
03/24 23:06, 19F
文章代碼(AID): #1DU4SZus (Python)