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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

237閲覧

Pytho2.7にてリスト生成させたい

Yoichinn

総合スコア16

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2019/03/06 06:29

編集2019/03/06 07:34

お世話になります。
ご教授いただけないでしょうか。

■環境
Windows10・Python2.7

■やりたいこと
リスト1を生成させ、リスト内のデータ個数が10個超えるとリスト2を生成し、更にデータを格納。
また、10個超えるとリスト3を生成し更にデータを格納・・・以下繰り返し

のようにデータ格納個数が一定数を超えると新しいリストを生成を次々に行わせていきたいと考えております。

初心者のため質問の内容がわかりにくいと思いますが、どのようにすればやりたいことができるのかをご教示いただけると幸いです。
※以下のコードのように作ってみたところ、インデントエラーが発生し実行できませんでした。

■理由
現在使っているシステムにて、リストに入れられる個数に制限があるため
制限個数を超える前に別のリストを新たに生成する必要があるため

■コードのイメージ

python2

1# -*- coding: utf-8 -*- 2# coding=utf8 3 4 5list = ['a', 'b', 'c', 'd','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 6 7#リスト生成用 8No = 1 9 10for i in list: 11 if type(ph + str(No)) != 'list': 12 ph + str(No) = [] #←こんな感じでリストを作れないでしょうか? 13 14 (ph + str(No)).append('aaa') 15 if len(ph + str(No)) > 10: 16 No = No + 1

※一部コードに記載ミスがありましたので修正いたしました

<追記>
エラーメッセージ
File "test_list.py", line 12
ph + str(No) = [] #竊舌%繧薙↑諢溘§縺ァ繝ェ繧ケ繝医r菴懊l縺ェ縺・〒縺励g縺・°
・・
SyntaxError: can't assign to operator

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

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

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

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

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

mather

2019/03/06 06:40

インデントエラーではないはずです。エラーメッセージを質問に追記してください。 また、実行したい手順を書くより「想定される入力」に対する「期待される出力結果」を記載してください。
mather

2019/03/06 06:41

もしかして、 ph + str(No) というのは ph1 という変数を宣言したいという意味ですか?
Yoichinn

2019/03/06 07:04

ご確認およびご指摘いただきありがとうございます。 エラーメッセージ追記いたしました。 変数について、おっしゃるとおりph1のように空のリストを次々と生成できないかと考えております
mather

2019/03/06 07:07

質問にあるコードをコピペして確認しましたが、インデントは正常ですがSyntaxErrorになります。 手元にあるコードは質問に記載したコードと本当に同じですか?
Yoichinn

2019/03/06 07:21

再度、ご指摘頂きありがとうございます。 コードのコピペの際に誤ったコードを貼り付けてしまっておりました。 大変失礼いたしました。 再度コード更新いたしましたのでご確認いただいてもよろしいでしょうか。 お手間を取らせてしまい、申し訳ございません。
mather

2019/03/06 07:23

同じくSyntaxErrorです。確認ですが全角空白とか使ってませんか?
Yoichinn

2019/03/06 07:28

再度ご確認頂きありがとうございます。 おっしゃるとおりでした。Tabを使ってインデントをいれているつもりでしたが エラーが出る箇所に半角空白で入れてしまった部分がありました。 大変失礼いたしました。 結果、エラーは以下のように履きだされ、Syntaxエラーが発生いたしました File "test_list.py", line 12 ph + str(No) = [] #竊舌%繧薙↑諢溘§縺ァ繝ェ繧ケ繝医r菴懊l縺ェ縺・〒縺励g縺・° ・・ SyntaxError: can't assign to operator
guest

回答2

0

ベストアンサー

すでにあるリストを10個ずつ分割する場合

python のスライスを利用して10個区切りで分割するのがよいかと思います。

python

1lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 2 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 3 'u', 'v', 'w', 'x', 'y', 'z'] 4 5sperated_lst = [lst[i:i + 10] for i in range(0, len(lst), 10)] 6 7print sperated_lst[0] # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 8print sperated_lst[1] # ['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'] 9print sperated_lst[2] # ['u', 'v', 'w', 'x', 'y', 'z']

要素の数が予めわからない場合

要素の数が予めわからない場合は以下のようにしてください。

python

1import numpy as np 2 3data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 4 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 5 'u', 'v', 'w', 'x', 'y', 'z'] 6 7lst = [] 8sub_lst = [] 9for v in data: 10 sub_lst.append(v) # sub_lst に1個ずつ追加していく 11 12 if len(sub_lst) == 10: # sub_lst が10個になった場合 13 lst.append(sub_lst) # lst に sub_lst を追加し、空にする。 14 sub_lst = [] 15lst.append(sub_lst) # 余った分も lst に追加する。

投稿2019/03/06 06:37

編集2019/03/06 06:50
tiitoi

総合スコア21956

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

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

Yoichinn

2019/03/06 06:53

ご回答頂きありがとうございます。 確かにおっしゃるとおりリストを分ければいけますね! 追加ですみません。 ご教示いただいたやり方でやる場合、以下のように最終的にできるリストの個数を計算 ''' n = -(-len(lst)//10) ''' リストの切替は ''' for i range(0:n): sperated_lst[i] ''' のようにすれば良いと考えていいでしょうか? 初歩的な質問で申し訳ありませんが、ご教示お願いいたします。
tiitoi

2019/03/06 06:57

最終的にできるリストの個数は import math math.ceil(len(lst) / 10)) ですが、 分割したあとなら、単純に len(sperated_lst) で得られると思います。 もっというと、以下のようにすればリストが何個に分割されたかを知る必要もないと思います。 for sub_lst in sperated_lst: 処理
Yoichinn

2019/03/06 09:43 編集

そういうことですね。失礼いたしました。 こちらの方法で試してみます。 ありがとうございます! 追記 要素数が変動する場合も追記頂きありがとうございます! 追記 お蔭様で期待通りのことができそうです。本当にありがとうございます!
guest

0

変数について補足です。

ph + str(No) のように変数を作ることは原則できません。
できるのはdictのキーにするくらいです。

python

1result = dict() 2result["ph" + str(No)] = 1 3 4result["ph1"] #=> 1

しかし、ph1 のような名前にこだわりがないなら、tiitoiさんの回答にあるようにリストで結果を得ることができれば十分だと思います。

投稿2019/03/06 07:43

mather

総合スコア6753

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

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

Yoichinn

2019/03/06 07:51

matherさん ありがとうございます。 また、お手数おかけして申し訳ありませんでした。 今回、tiitoiさんのやり方でやってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問