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

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

ただいまの
回答率

87.61%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 599

score 16

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

■環境
Windows10・Python2.7

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

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

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

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

■コードのイメージ

# -*- coding: utf-8 -*-
# coding=utf8


list = ['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']

#リスト生成用
No = 1

for i in list:
    if type(ph + str(No)) != 'list':
        ph + str(No) = [] #←こんな感じでリストを作れないでしょうか?

    (ph + str(No)).append('aaa')
    if len(ph + str(No)) > 10:
        No = No + 1


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Yoichinn

    2019/03/06 16:21

    再度、ご指摘頂きありがとうございます。
    コードのコピペの際に誤ったコードを貼り付けてしまっておりました。
    大変失礼いたしました。

    再度コード更新いたしましたのでご確認いただいてもよろしいでしょうか。
    お手間を取らせてしまい、申し訳ございません。

    キャンセル

  • mather

    2019/03/06 16:23

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

    キャンセル

  • Yoichinn

    2019/03/06 16:28

    再度ご確認頂きありがとうございます。
    おっしゃるとおりでした。Tabを使ってインデントをいれているつもりでしたが
    エラーが出る箇所に半角空白で入れてしまった部分がありました。
    大変失礼いたしました。

    結果、エラーは以下のように履きだされ、Syntaxエラーが発生いたしました
    File "test_list.py", line 12
    ph + str(No) = [] #竊舌%繧薙↑諢溘§縺ァ繝ェ繧ケ繝医r菴懊l縺ェ縺・〒縺励g縺・°
    ・・
    SyntaxError: can't assign to operator

    キャンセル

回答 2

checkベストアンサー

+1

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

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

lst = ['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']

sperated_lst = [lst[i:i + 10] for i in range(0, len(lst), 10)]

print sperated_lst[0]  # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
print sperated_lst[1]  # ['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']
print sperated_lst[2]  # ['u', 'v', 'w', 'x', 'y', 'z']

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

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

import numpy as np

data = ['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']

lst = []
sub_lst = []
for v in data:
    sub_lst.append(v)  # sub_lst に1個ずつ追加していく

    if len(sub_lst) == 10:  # sub_lst が10個になった場合
        lst.append(sub_lst)  # lst に sub_lst を追加し、空にする。
        sub_lst = []
lst.append(sub_lst)  # 余った分も lst に追加する。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/06 15:53

    ご回答頂きありがとうございます。
    確かにおっしゃるとおりリストを分ければいけますね!

    追加ですみません。
    ご教示いただいたやり方でやる場合、以下のように最終的にできるリストの個数を計算
    '''
    n = -(-len(lst)//10)
    '''

    リストの切替は
    '''
    for i range(0:n):
    sperated_lst[i]
    '''
    のようにすれば良いと考えていいでしょうか?
    初歩的な質問で申し訳ありませんが、ご教示お願いいたします。

    キャンセル

  • 2019/03/06 15:57

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

    キャンセル

  • 2019/03/06 16:06 編集

    そういうことですね。失礼いたしました。
    こちらの方法で試してみます。
    ありがとうございます!

    追記 要素数が変動する場合も追記頂きありがとうございます!

    追記 お蔭様で期待通りのことができそうです。本当にありがとうございます!

    キャンセル

0

変数について補足です。

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

result = dict()
result["ph" + str(No)] = 1

result["ph1"] #=> 1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/06 16:51

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

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る