質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

862閲覧

Pythonで不連続の通し番号を連続値に置換える方法について

Kohei_KESE

総合スコア41

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/17 07:28

Python

1Before 2a[0] = [1, 2, ...] 3a[5] = [4, 1, ...] 4a[11] = [1, 26, ...] 5...

Python

1After 2a[0] = [1, 2, ...] 3a[1] = [4, 1, ...] 4a[2] = [1, 26, ...] 5...

上記のように括弧の中身が0, 5 , 11のようにバラバラな配列がたくさんあるとき、括弧内の数字を小さい順にソートしたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/09/17 07:30

aの型は何ですか?
Kohei_KESE

2018/09/17 07:37

aはリストを想定しています。
LouiS0616

2018/09/17 07:38

aがリストである場合、a[5]が存在するならa[1]も既に在るはずなのですが。
Kohei_KESE

2018/09/17 07:47

イメージとしては既にa[1]~a[n]がそれぞれ定義されていて、for文でnを0からnまで振るときにifで条件指定してa[0],a[5],a[11]が残ったので、それをソートしようとしています。
guest

回答4

0

イメージとしては既にa[1]~a[n]がそれぞれ定義されていて、for文でnを0からnまで振るときにifで条件指定してa[0],a[5],a[11]が残ったので、それをソートしようとしています。

条件を満たす要素のリストを新しく作れば良いのでは。

Python

1def is_odd(num): 2 return num % 2 == 1 3 4 5src = range(10) 6print(list(src)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 7 8dst = filter(is_odd, src) 9print(list(dst)) # [1, 3, 5, 7, 9]

条件判定に用いる関数だけ適切に用意してやれば良いです。


numpyなら次のように書くのも良いでしょう。

Python

1import numpy as np 2 3 4@np.vectorize 5def is_odd(num): 6 return num % 2 == 1 7 8 9arr = np.arange(10) 10print(arr) # [0 1 2 3 4 5 6 7 8 9] 11 12arr = arr[is_odd(arr)] # この例に関しては arr[arr % 2 == 1] の方が簡潔。 13print(arr) # [1 3 5 7 9]

投稿2018/09/17 07:56

編集2018/09/17 08:45
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opyon

2018/09/17 08:23

出来上がった配列操作するよりスマートですね。 関数さえ作ればどんな条件でも対応出来る点も汎用性が高そうです。
LouiS0616

2018/09/17 08:31

opyonさんの回答と本質的な部分は変わらないかと。 個人的にはリストをじゃんじゃん作る富豪的なコーディングが好みです。
opyon

2018/09/17 08:33

富豪なんて羨ましいですねぇ。 ネットで検索して拾って来てコピペするだけです^^;
Kohei_KESE

2018/09/17 08:47

回答ありがとうございます。filterは使ったことがないので、今勉強しているところなのですが、頑張って実装してみようと思います。
guest

0

ベストアンサー

もっとスマートなというか、何かに配列を代入するだけで出来た記憶があったのですが思い出せないので。
とりあえず見た目が分かりやすいように作ってみました。

-下記のコード引用-
pythonのリストの空データを削除する

Python

1# coding=UTF-8 2 3# Before 4a = [[]] * 5 5a[0] = [0, 1] 6a[2] = [20, 3] 7a[4] = [40, 5] 8# 確認 9for i,num in enumerate(a): 10 print(str(i)+":",str(num)) 11 12# 空要素を削除 13a = list(filter(lambda value:value != [], a)) 14print() 15 16# After 17# 確認 18for i,num in enumerate(a): 19 print(str(i)+":",str(num)) 20print() 21 22# 確認の確認 23# indexで要素を取得0,1,2で取得出来ている 24for i,num in enumerate(a): 25 print(str(i)+":",str(a[i]))

出力結果

0: [0, 1] 1: [] 2: [20, 3] 3: [] 4: [40, 5] 0: [0, 1] 1: [20, 3] 2: [40, 5] 0: [0, 1] 1: [20, 3] 2: [40, 5]

投稿2018/09/17 07:54

編集2018/09/17 08:15
opyon

総合スコア1009

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kohei_KESE

2018/09/17 08:43

回答ありがとうございます。 opyonさんのコードを参考になんとか望みの出力を得ることができました。
guest

0

一旦別の配列bにソートした配列を作ってからaに戻します
aだけで頑張るとハマります

a[0] = [1, 2, ...]
a[5] = [4, 1, ...]
a[11] = [1, 26, ...]

bにソートしたデータを作る
b[0] = [1, 2, ...]
b[1] = [4, 1, ...]
b[2] = [1, 26, ...]

で、aにコピー
a=b

投稿2018/09/17 07:53

Nst329

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

opyon

2018/09/17 07:58

sort()して順番変わって良いならそれが楽ですね。 因みにsort()すると当然順番が入れ替わります。 この例ですとb[1]とb[2]が逆転するはずです。
Kohei_KESE

2018/09/17 08:44

回答ありがとうございます。 恥ずかしながら、sortの概念を知らなかったので勉強になりました。
guest

0

とりあえず「python sort」でぐぐってみよう

投稿2018/09/17 07:34

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問