我是故意用 python 犯罪的。這是一種糟糕的做法。這里的目標是被詛咒的代碼。都在一條線上。
我基本上有以下內容
with open("file") as f:
[int(x) for x in [y for y in f.read().split()]
我不能使用
with open("file") as f:
a = f.read().split()
[x for x in [(a[i-1, e]) for i, e in enumerate(a) if i > 0] ...]
因為我們的目標是將它放在一行中(除了 with open)
我想從原始物件回傳當前元素以及前一個或下一個。
為了清楚地說明它。
a = [1, 2, 3, 4, 5]
非法代碼回傳后
[(1, 2), (2, 3), (3, 4), (4, 5), (5, ?)]
所以這里的重點不是生產代碼。這純粹是為了看看我們可以濫用該語言的程度。
到目前為止,我發現https://code.activestate.com/recipes/204297/參考了 python2 中 local 的使用,在使用它之后我發現它的界面有點不同。我已經能夠在記憶體中獲取物件,但是現在我不知道如何實際使用這個物件。
local()['.0']
大多數屬性似乎都丟失了,沒有 __self__ 可以呼叫。
請為此分享您最受詛咒的想法。
uj5u.com熱心網友回復:
通常,我會在生成器上使用tee和islice來做這樣的事情:
from itertools import tee, islice
with open("file") as f:
a, b = tee(f.read().split())
b = islice(b, 1, None)
list(zip(a, b))
您可以使用(濫用)海象運算子 ( :=)將其轉換為單行:
list(zip((k := tee(f.read().split()))[0], islice(k[1], 1, None)))
結果是
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
如果要填充最后一個元素,請使用zip_longest代替zip:
from itertools import tee, islice, zip_longest
...
list(zip_longest((k := tee(f.read().split()))[0], islice(k[1], 1, None), fillvalue='?'))
在這種情況下的結果是
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, '?')]
以這種方式使用迭代器而不是串列的好處在于,whilef.read().split()是一個已知長度的序列,tee并且islice可以處理任何可迭代物件,即使長度未知。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/372446.html
