digits = [1, 2, 3, 4, 5, 6] # を 123456 という整数に変換したいとのことで,
int(''.join([str(n) for n in digits]))
が書かれていた。
以下のようにも書ける。
int(''.join(map(str, digits)))
digits = [1, 2, 3, 4, 5, 6] # を 123456 という整数に変換したいとのことで,
int(''.join([str(n) for n in digits]))
が書かれていた。
以下のようにも書ける。
int(''.join(map(str, digits)))
a がリストなんだが(そもそもリストである必然性はないが),その合計を求めるのに
a = [5, 5, 5, 2, 4, 1, 2, 4, 4, 3, 4, 2, 1, 1]
t = 0
for j in range(len(a)):
t += a[j]
print(t)
t は 43 になるが,こんなものに 3 行もかける意義はない
t = sum(a) で十分
作者は従来のプログラミング言語の作法に毒されている模様。
なお,a.sum() はエラーになるのが Python の,ヤなところ。
100000x1500 のデータフレームの,2列目の数値データによりソートしたデータファイルを作る。
R だと,以下のスクリプトで 220 秒ほどかかる。
df = read.csv("test.csv")
write.csv(df[order(df[,2]),], file="test1.csv", row.names=FALSE)
AWK, sort を組み合わせると 20 秒ほどで終わる。
awk -F "," '{print $2, $0}' test.csv | sort -ns | awk '{print $2}' > test2.csv
CSV ファイルのデータで,ある変数の条件によりデータを選択して別ファイルに書き出す。
100000x1500 のデータで,1列目の変数が 80 より大きいもののみ別ファイルに書き出す。
system.time({
df = read.csv("test.csv")
write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})
これだと,75.519 秒かかる。
system.time({
library(data.table)
df = as.data.frame(fread("test.csv"))
write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})
これだと,5.531 秒かかる。
AWK を使うと,ものすごく速い。
$ cat select.awk
BEGIN {
FS = ","
getline
print $0
}
$1 > 80 {
print $0
}
$ time awk -f select.awk < test.csv > select1.csv
0.541u 0.165s 0:00.71 98.5% 0+0k 0+0io 84pf+0w
0.541 秒である。
なお,注意すべきは,プログラムはターミナルで動かすこと。
R の中で system("awk -f select.awk < test.csv > select1.csv") なんてやると,53 秒かかる。