我遇到,我重構成爲這一些Python代碼V2.7:這個Python循環可以更簡潔地表達嗎?
for ssid in (ssid for ssid in overlaps
if ssid != subseq_id and ssid not in merged):
但感覺對我來說,應該有表達這種不使用兩個for
語句的方法嗎?
我遇到,我重構成爲這一些Python代碼V2.7:這個Python循環可以更簡潔地表達嗎?
for ssid in (ssid for ssid in overlaps
if ssid != subseq_id and ssid not in merged):
但感覺對我來說,應該有表達這種不使用兩個for
語句的方法嗎?
你可以使用filter()
:
for ssid in filter(lambda s: s != subseq_id and s not in merged, overlaps):
# ...
,或者你可能只是測試在循環:
for ssid in overlaps:
if ssid == subseq_id or ssid in merged:
continue
# ...
+1第二種選擇。如果你不希望'ssid == subseq_id'經常是'True',那麼交換測試可能會更有效率 – 2013-02-28 22:16:09
根據數據(順序並不重要,......),你可以使用集合:
excluded = set(merged)
excluded.add(subseq_id)
ssids = set(overlaps) - excluded
for ssid in ssids:
...
嚴格來說,這是一個'for'語句包含一個lis理解,而不是兩個「for」陳述。關鍵字'for'有兩個用途是一種巧合。 – minopret 2013-02-28 21:56:51
@minopret它不是一個列表理解,它是一個生成器表達式 – 2013-02-28 22:13:49
好吧,是的,它會產生一個懶惰列表而不是嚴格的列表,因爲我說「嚴格」我可能已經鑽研到這個細節:-) – minopret 2013-02-28 22:18:50