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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

383閲覧

リストに数字を規則的に挿入する

shunsuke1937

総合スコア48

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/09/08 09:23

下記のようにリストを作成しました。
AA = ['a','b','c'・・・]
これを下記のように
AA = ['a','0','0','0','b','0','0','0','c','0','0','0'・・・]
リストの文字間に0を3つ挿入したいのですが、どのように
コードを記入すればよろしいでしょうか?
文字列は可変なので、リスト内が数百になった場合には
下記のように示すことは、現実的ではないので、規則的に
挿入する方法をご教示いただけますでしょうか?

python

1AA = ['a','b','c'] 2AA.insert(1,'0') 3AA.insert(2,'0') 4AA.insert(3,'0') 5AA.insert(5,'0') 6AA.insert(6,'0') 7AA.insert(7,'0') 8AA.insert(9,'0') 9AA.insert(10,'0') 10AA.insert(11,'0')

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

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

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

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

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

guest

回答3

0

内包表記で。

python

1>>> AA = ['a', 'b', 'c', 'd'] 2>>> [c for a in AA for c in [a]+["0"]*3] 3['a', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', 'd', '0', '0', '0']

投稿2018/09/08 12:13

hayataka2049

総合スコア30933

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

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

0

ベストアンサー

こんにちは。
以下の回答の前提として、ご質問に

リストの文字間に0を3つ挿入したい

とあるので、与件としては 変換後の配列の末尾は '0','0','0' にしたくない ということと解釈しました。

とすると、たとえば以下ではどうでしょう?

python

1AA = ['a', 'b', 'c', 'd'] 2 3AA = (',0'*3+',').join(AA).split(',') 4 5print(AA)

上記を実行すると

['a', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', 'd']

と表示されます。


追記

変換後の配列の末尾も'0','0','0'にしたい、ということであれば、たとえば以下のように書けます。

python

1AA = ['a', 'b', 'c', 'd'] 2 3AA = sum([(x + ',0'*3).split(',') for x in AA], []) 4 5print(AA) # => ['a', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', 'd', '0', '0', '0']

追記2

わざわざ、カンマ区切りの文字列を経由することはありませんでしたので、以下でよいかと思います。

python

1AA = ['a', 'b', 'c', 'd'] 2 3AA = sum([[x]+['0']*3 for x in AA], []) 4 5print(AA) # => ['a', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', 'd', '0', '0', '0']

投稿2018/09/08 09:44

編集2018/09/08 10:07
jun68ykt

総合スコア9058

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

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

shunsuke1937

2018/09/08 09:55

ご回答ありがとうございます。 趣旨についてはご理解いただいている内容であっているのですが 質問について説明不足な点がありましたので、 補足説明をさせてください。 末尾も'0','0','0'としたいです。 上記の例では、 ['a', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', 'd','0', '0', '0'] としたいです。 よろしくお願いいたします
jun68ykt

2018/09/08 10:00

> 末尾も'0','0','0'としたいです。 とのことですので、回答に追記しました。
shunsuke1937

2018/09/08 10:08

回答ありがとうございました。 解決することができました。 ありがとうございました。
jun68ykt

2018/09/08 10:09

解決されたのことで、よかったです!
shunsuke1937

2018/09/10 14:37

すみません、追加でご確認いただけますでしょうか? AA = [aa,bb,cc] とした場合に、同じようにコード書くと AA = [a,0,0,0,a,0,0,0,b,0,0,0,b,0,0,0,c,0,0,0,c,0,0,0] となってしまいました。 AA = [aa,0,0,0,bb,0,0,0,cc,0,0,0] としたいです。 上記の場合では、どのように書き換えればよろしいでしょうか? よろしくお願いいたします。
jun68ykt

2018/09/10 14:55

こんにちは。 確認しましたが、AA が3つの文字列、'aa' , 'bb', 'cc' を持つ、すなわち、 AA = ['aa', 'bb', 'cc'] のときには、回答に書いた変換式 AA = sum([[x]+['0']*3 for x in AA], []) によって、AA は ['aa', '0', '0', '0', 'bb', '0', '0', '0', 'cc', '0', '0', '0'] になります。また、AAが以下 AA = ['a', 'a', 'b', 'b', 'c', ' c'] のような、6つの文字列を持つ場合は AA = sum([[x]+['0']*3 for x in AA], []) によって、AAは ['a', '0', '0', '0', 'a', '0', '0', '0', 'b', '0', '0', '0', 'b', '0', '0', '0', 'c', '0', '0', '0', ' c', '0', '0', '0'] となります。 上記は望ましくない動作でしょうか?
guest

0

例えば以下のようにループを使えば、文字のリストの大きさに依存しないコードが書けます。

Python3

1letters = ['a','b','c'] 2AA = [] 3for letter in letters: 4 AA.append(letter) 5 AA.extend(['0'] * 3)

投稿2018/09/08 09:37

編集2018/09/08 09:39
carrotRakko

総合スコア77

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問