pythonfilterby
通過Flask-SQLAlchemy提供的一個query屬性,當你通過model類的query屬性,你可以得到一個資料庫表的查詢結果集。
i.User.query.filter_by(username='peter').first(),通過filter_by方法里的條件表達式來對query所得到的結果集進行過濾,得到你想要得到的結果。
example:
Retrieve a user by username通過username屬性為』peter『過濾結果集:
>>> peter = User.query.filter_by(username='peter').first()
>>> peter.id
1
>>> peter.email
u'[email protected]'
當不存在結果集時返回none:
>>> missing = User.query.filter_by(username='missing').first()
>>> missing is None
True
⑵ python filter對象怎麼遍歷
糾正一下你的這句話
其實才是真正的filter的入參,而x指的是filter的另一個入參it。
這里的it是一個生成器對象,而filter每次會得到一個由它生成的值。所以x指的不是it,只是it產生的一個值。
至於怎麼實現將it中的數據遍歷下去,這個很好解釋。
我們知道filter接受兩個參數function和iterable。而filter的功能就等價於(item for item in iterable if function(item)),它就是這么遍歷完的。。。
it裡面到底是啥? 正如你知道的,它就是一個生成器對象。每當一次調用結束後它就會掛起,直到下一次被激活。
while True:
n = next(it)
yield n it = filter(_not_divisible(n), it)#怎麼就實現了循環遍歷 it了?
它的實質就是把得到的每個素數從生成器中剔除。
⑶ python中的filter函數怎麼用
python filter內建函數
filter函數是python內建函數,可以操作任何可迭代類型,如list,tuple,string.
filter需要帶上一個函數function和一個可迭代序列作為參數。filter()將調用該function作用於每一個可迭代序列的元素,並返回一個由該function驗證後返回值為true的元素組成新的可迭代序列,新序列的類型保持與filter參數序列的類型一致
2.filter與數字
下面用這個例子來說明:
#建個數字列表
numbers=[1,5,9,8,4,6,3,7]
#定義一個過濾標准,取小於5的數
deflessThanFive(element):
returnelement<5
printfilter(lessThanFive,numbers)
輸出結果是列表:[1,4,3]
解說:此處的過濾函數lessThanFive必需帶入一個參數(filter()會調用lessThanFive,參數是列表nembers中的每一個元素,一次一個)。filter()返回所有值都是小於5的列表
3.filter與字元串
下面用如下例子說明:
#定義元組類型
names=('Jack','Jill,'Steve','')
#篩選出名字
new_names=filter(None,names)
printnew_names
輸出結果是元組:
('Jack','Jill,'Steve')
在元組names最後一個名字是空字元串,而filter的第一個參數是None,這說明需要使用identity函數(該函數是簡單的返回該元素的)
因為python對空字元串,0和None作為False,所以上面的filter的語句就是移除空元素。
4.filter和函數
目的:找出以J開頭的名字
defstartsWithJ(element):
ifelement:
returnelement[0]=='J'
returnFalse
j_names=filter(startsWithJ,names)
printj_names
輸出結果是元組:('Jack','Jill')
注意到了嗎,上面的2個結果都是tuple而不是list,再一次說明fliter的返回值類型與參數序列的類型保持一致
⑷ python中的filter()函數怎麼用特別是一個函數有多個輸入參數時。
map是把函數調用的結果放在列表裡面返回,它也可以接受多個 iterable,在第n次調用function時,將使用iterable1[n], iterable2[n], ...作為參數。
filter(function, iterable)
這個函數的功能是過濾出iterable中所有以元素自身作為參數調用function時返回True或bool(返回值)為True的元素並以列表返回.
def f_large_than_5(x):
return x > 5
filter(f_large_than_5, range(10))
>>[6,7,8,9]
⑸ 如何用python寫這個代碼
如有問題,請私聊我,謝謝。
⑹ python中filter和map的區別
li=[11,22,33,44,55,66]
ret=filter(lambdaa:a>33,li)
print(list(ret))
filter是過濾集合中的部分結果
ret2=map(lambdaa:a+100,li)
print(list(ret2))
map是映射每一個元素
⑺ python filter函數
不會死循環,生成器是個虛擬抽象的概念,你可以認為_odd_iter()primes() 裡面運行的時候
python解釋器並不生成實際的List,也就不會耗費內存和時間
真正分配給List內存只在以下過程, primes()這個生成器是逐步分配內存的!!
forninprimes():
ifn<1000:
print(n)
else:
break
另外提醒你下,你的程序只能在Python 3.x版本下正確運行:-)因為你用的是 filter返回生成器對象的用法!!如果你要你的程序在Python 2.x正確運行,需改成如下形式。
根據你最新的追問,「為什麼it=filter(lambda x : x%n>0 ,it)不行??「直接在filter里用Lambda表達式是完全可以的,你的原因是你的Lambda表達式漏輸入了一個n,請看如下形式.
#Python2.x下需導入itertools庫的ifilter才能和python3.x的filter等效
importitertools
def_odd_iter():
n=1
whileTrue:
n=n+2
yieldn
def_not_divisible(n):
returnlambdax:x%n>0
defprimes():
yield2
it=_odd_iter()
whileTrue:
n=next(it)
yieldn
#it=itertools.ifilter(_not_divisible(n),it)
it=itertools.ifilter(lambdax,n=n:x%n>0,it)
forninprimes():
ifn<1000:
print(n)
else:
break
⑻ Python 中關於filter函數問題求教
看文字的話會很亂,和圖一起看會好一點
首先,it是個生成器(_odd_iter),並使n=3,隨後,it作為一個生成器存在於filter對象中(迭代器),並使it為一個filter對象,經過循環,到達next語句,先計算it _odd_iter(生成器),生成了新的數之後,開始計算filter。第一次循環的時候第18行的代碼相當於 it = filter(_not_divisible(3), it ),等號右面的it還在等待next調用生成值,生成值之後,就將它代入為lambda的x中……第二次循環的時候第18行代碼變成 it = filter(_not_divisible(5), filter(_not_divisible(3), it ) ),同樣等號右面的it仍然在等待next調用生成新的值
我剛看這個教程,不知道對不對。。。
對了我看見有一個人問把代碼第18行改成 it = filter(lambda x: x % n > 0, it)
會失去過濾功能,我覺得,lambda是一個臨時函數,所以覺得像filter(div(5), filter(div(3), it))這種存在多個lambda臨時函數的話是很奇怪的,
在調試時,發現filter只檢測了一個n(最近被賦值的),相當於7%5,9%7這樣,因此失去過濾素數功能。模擬一下,在將要輸出5的時候,it = filter()的那行代碼變為:
it = filter(lambda x : x % n >0 , filter (lambda x : x % n > 0 , it ) ),it將值賦給x,但是,我覺得n被賦值時,會刷新其他lambda中的n,造成類似於 it =filter(lambda x : x % 5 >0 , filter (lambda x : x % 5 > 0 , it ) )的情況
⑼ python,這個語法哪裡錯了呢
chmod +x是linux命令,不能在Python中直接使用,更不能在Windows下使用。
⑽ 在python中,使用filter語句實現
我感覺這個場景不應該用 filter 來實現
因為 filter 做過濾的依據是序列中的元素內容
而這個場景的過濾依據的是元素出現的次序
如果一定要用 filter 也不是不可以,只是非常的別扭……
deffunc(lst):
whilelen(lst)>1:
lst=zip(*filter((lambdai:i[0]%2),enumerate(lst)))[1]
returnlst[0]iflstelseNone
printfunc([0,1,2,3,4,5,6,7,8,9])
#>>7