手頭有 109 張頭部 CT 的斷層掃描圖片,我打算用這些圖片嘗試頭部的三維重建。基礎工作之一,就是要把這些圖片數據讀出來,組織成一個三維的數據結構(實際上是四維的,因為每個像素有 RGBA 四個通道)。
這個數據結構,自然是 numpy 的 ndarray 對象,讀取圖像文件我習慣使用 PIL。因此,需要導入兩個模塊:
import
numpy
as
np
from
PIL
import
Image
接下來,我用一行代碼就把 109 張圖片讀到了一個 109x256x256x4 的 numpy 數組中,耗時 172 毫秒:
data
=
np
.
stack
(
[
np
.
array
(
Image
.
open
(
'head%d.png'
%
i
)
)
for
i
in
range
(
109
)
]
,
axis
=
0
)
通常,上面這一行代碼應該寫成這樣:
data
=
list
(
)
for
i
in
range
(
109
)
:
img
=
Image
.
open
(
'head%d.png'
%
i
)
img
=
np
.
array
(
img
)
data
.
append
(
img
)
data
=
np
.
stack
(
data
,
axis
=
0
)
我把這些代碼寫成一行,卻毫無晦澀艱深之感,仍然像詩歌一樣優美、像自然語言一樣通俗!
那一刻,我腦洞大開,很想知道 python 高手們只用一行代碼都能干些什么?當然,限定條件是不能引用自定義的模塊,可以使用內置模塊或通用的第三方模塊。上網一搜,發現這個問題好像是 python 的專屬問題,其他語言很難用一行代碼做點什么。知乎上有一篇名為《一行 Python 能實現什么喪心病狂的功能?》的帖子,其鏡像貼只有 java 的和 js 的,點進去發現,和 python 的完全不是一個概念。
整理了一下知乎上這篇文章的內容,頗覺有趣,分享給大家。
1. 一行代碼打印乘法口訣
print
(
'\n'
.
join
(
[
' '
.
join
(
[
"%2s x%2s = %2s"
%
(
j
,
i
,
i
*
j
)
for
j
in
range
(
1
,
i
+
1
)
]
)
for
i
in
range
(
1
,
10
)
]
)
)
2. 一行代碼打印迷宮
print
(
''
.
join
(
__import__
(
'random'
)
.
choice
(
'\u2571\u2572'
)
for
i
in
range
(
50
*
24
)
)
)
3. 一行代碼表白愛情
print
(
'\n'
.
join
(
[
''
.
join
(
[
(
'Love'
[
(
x
-
y
)
%
len
(
'Love'
)
]
if
(
(
x
*
0.05
)
**
2
+
(
y
*
0.1
)
**
2
-
1
)
**
3
-
(
x
*
0.05
)
**
2
*
(
y
*
0.1
)
**
3
<=
0else
' '
)
for
x
in
range
(
-
30
,
30
)
]
)
for
y
in
range
(
30
,
-
30
,
-
1
)
]
)
)
4. 一行代碼打印小龜龜
print
(
'\n'
.
join
(
[
''
.
join
(
[
'*'
if
abs
(
(
lambda
a
:
lambda
z
,
c
,
n
:
a
(
a
,
z
,
c
,
n
)
)
(
lambda
s
,
z
,
c
,
n
:
z
if
n
==
0
else
s
(
s
,
z
*
z
+
c
,
c
,
n
-
1
)
)
(
0
,
0.02
*
x
+
0.05j
*
y
,
40
)
)
<
2
else
' '
for
x
in
range
(
-
80
,
20
)
]
)
for
y
in
range
(
-
20
,
20
)
]
)
)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
