Python プロジェクトでの作業中にエラー: リスト インデックスが範囲外になります。

USBEN

リストの内容をグリッド形式で表示するために、このコードを作成しました。アルファベットリストでは問題なく動作します。しかし、ランダムに生成されたリストで実行しようとすると、リスト インデックスが範囲外エラーになります。

完全なコードは次のとおりです: import random

#barebones 2d shell grid generator



'''
Following list is a place holder
you can add any list data to show in a grid pattern with this tool
'''
lis = ['a','b','c','d','e','f','g','h','j','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

newLis = []
#generates random list
def lisGen():
    length = 20 # random.randint(10,20)
    for i in range(length):
        value = random.randint(1,9)
        newLis.append(str(value))

lisGen()

askRow = input('Enter number of rows :')
askColumns = input('Enter number of columns :')



def gridGen(row,column):
    j=0

    cnt = int(row)
    while (cnt>0):

        for i in range(int(column)):
            print(' '+'-',end='')
        print('\n',end='')
#this is the output content loop
        for i in range(int(column)):
            if j<len(lis):
                print('|'+newLis[j],end='')
                j += 1
            else:
                print('|'+' ',end='')

        print('|',end='')
        print('\n',end='')
        cnt -= 1

    for i in range(int(column)):
        print(' '+'-',end='')
    print('\n',end='')




gridGen(askRow,askColumns)

アルファベットリスト (lis) を使用した、期待される/正しい出力:

Enter number of rows :7
Enter number of columns :7
 - - - - - - -
|a|b|c|d|e|f|g|
 - - - - - - -
|h|j|i|j|k|l|m|
 - - - - - - -
|n|o|p|q|r|s|t|
 - - - - - - -
|u|v|w|x|y|z| |
 - - - - - - -
| | | | | | | |
 - - - - - - -
| | | | | | | |
 - - - - - - -
| | | | | | | |
 - - - - - - -

ランダムに生成されたリスト ( newLis ) を使用した場合のエラー出力:

Enter number of rows :7
Enter number of columns :7
 - - - - - - -
|9|2|1|4|7|5|4|
 - - - - - - -
|9|7|7|3|2|1|3|
 - - - - - - -
|7|5|4|1|2|3Traceback (most recent call last):
  File "D:\01-Mywares\python\2d shell graphics\gridGen.py", line 56, in <module>
    gridGen(askRow,askColumns)
  File "D:\01-Mywares\python\2d shell graphics\gridGen.py", line 40, in gridGen
    print('|'+newLis[j],end='')
IndexError: list index out of range
PM 2リング

あなたのgridGen関数はインデックスを作成してnewLisますがlis代わりに のサイズをテストしていますnewLisgridGenグローバルにアクセスするのではなく、印刷するリストを渡す方がはるかに優れた設計になりますnewLisそうすれば、コードが読みやすくなり、そのような間違いをする可能性が低くなります。同様に、lisGenglobal を変更するのではなく、ローカル リストを作成してそれを返す必要がありますnewLis

あなたgridGenは必要以上に複雑です。出力したいリストのイテレータを作成し、そのイテレータでnext関数を呼び出すことで単純化できます。私たちは、与えるnextのデフォルト引数' 'リストは、項目を使い果たしそうする場合、単一の空白文字を含む文字列を-next空白を返します。

文字列を 1 つずつ出力するのではなく、リスト内包表記の各行を作成し、行内の文字列を 1 つの文字列に結合します。

これがあなたのプログラムの私のバージョンです。PEP-8 スタイル ガイドに準拠するように名前を変更しました。

import random

random.seed(42)

def lis_gen():
    newlis = []
    length = 20
    for i in range(length):
        value = random.randint(1,9)
        newlis.append(str(value))
    return newlis

def grid_gen(lis, rows, cols):
    it = iter(lis)

    # Horizontal line
    hline = ' -' * cols
    print(hline)
    for j in range(rows):
        line = '|'.join([next(it, ' ') for i in range(cols)])
        print('|' + line + '|')
        print(hline)

ask_rows = 5
ask_cols = 7

alpha = list('abcdefghijklmnopqrstuvwxyz')
grid_gen(alpha, ask_rows, ask_cols)
print()

newlis = lis_gen()
grid_gen(newlis, ask_rows, ask_cols)

出力

 - - - - - - -
|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| | |
 - - - - - - -
| | | | | | | |
 - - - - - - -

 - - - - - - -
|2|1|5|4|4|3|2|
 - - - - - - -
|9|2|7|1|1|2|4|
 - - - - - - -
|4|9|1|9|4|9| |
 - - - - - - -
| | | | | | | |
 - - - - - - -
| | | | | | | |
 - - - - - - -

ここで実際に行う必要はないことに注意してください。リストの代わりに文字列alpha = list('abcdefghijklmnopqrstuvwxyz')を渡すとgrid_gen、文字列内の各文字を反復処理します。


に改善の余地ありgrid_genもう少し作業をすれば、複数の文字を含む文字列をきれいに出力できます。最初のステップは、入力リストをスキャンして、それに含まれる最も長い文字列の長さを見つけることです。lisが文字列のリストである場合、それを行うことができます

maxlen = max(map(len, lis))

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonのリストに問題があります。リストインデックスが範囲外

分類Dev

Pythonでpopを使用するとインデックスが範囲外エラーになります

分類Dev

Python配列をループすると、リストインデックスが範囲外エラーになります

分類Dev

「リストインデックスが範囲外です」-Python

分類Dev

Python IndexError:リストを反復可能として使用すると、リストインデックスが範囲外になります

分類Dev

IndexError:リスト割り当てインデックスが範囲外です、Python

分類Dev

IndexError:Pythonでマインスイーパのグリッドを作成しようとすると、インデックスが範囲外になります

分類Dev

Pythonエラー:リストインデックスが範囲外です

分類Dev

Python:リストインデックスが範囲外ですが、リストにアイテムがありますか?

分類Dev

Pythonでインデックスが範囲外になる

分類Dev

Python-データを分離するときにエラーがスローされます-リストインデックスが範囲外です

分類Dev

IndexError:インデックスが範囲外ですが、要素が十分にありますか?!Python

分類Dev

Pythonでエラー「リスト割り当てインデックスが範囲外」を解決する方法

分類Dev

Python辞書インデックスエラー:リストインデックスが範囲外です

分類Dev

リストインデックスが範囲外-Pythonで

分類Dev

「リスト割り当てインデックスが範囲外」Pythonの問題

分類Dev

「検索」が原因で「文字列インデックスが範囲外」になっていますか?(Python)

分類Dev

Python:osmapiを使用してクエリを実行すると、インデックスが範囲外になります

分類Dev

(Python)リストインデックスが範囲外-反復

分類Dev

リストインデックスが範囲外:PYTHON

分類Dev

Python IndexError:リストインデックスが範囲外PushBullet

分類Dev

Python3:リストインデックスが範囲外

分類Dev

Python3:リストインデックスが範囲外

分類Dev

Pythonエラー:インデックスが範囲外です

分類Dev

リストからタプル値を外挿するときにPythonインデックスが範囲外

分類Dev

Python、リストエラー:IndexError:リストインデックスが範囲外です

分類Dev

修正方法:Pythonで「リストインデックスが範囲外です...」

分類Dev

BeautifulSoup(Python)で「リストインデックスが範囲外」になるのを防ぐ方法

分類Dev

IndexError:リストインデックスが範囲外です-Python CSV

Related 関連記事

  1. 1

    Pythonのリストに問題があります。リストインデックスが範囲外

  2. 2

    Pythonでpopを使用するとインデックスが範囲外エラーになります

  3. 3

    Python配列をループすると、リストインデックスが範囲外エラーになります

  4. 4

    「リストインデックスが範囲外です」-Python

  5. 5

    Python IndexError:リストを反復可能として使用すると、リストインデックスが範囲外になります

  6. 6

    IndexError:リスト割り当てインデックスが範囲外です、Python

  7. 7

    IndexError:Pythonでマインスイーパのグリッドを作成しようとすると、インデックスが範囲外になります

  8. 8

    Pythonエラー:リストインデックスが範囲外です

  9. 9

    Python:リストインデックスが範囲外ですが、リストにアイテムがありますか?

  10. 10

    Pythonでインデックスが範囲外になる

  11. 11

    Python-データを分離するときにエラーがスローされます-リストインデックスが範囲外です

  12. 12

    IndexError:インデックスが範囲外ですが、要素が十分にありますか?!Python

  13. 13

    Pythonでエラー「リスト割り当てインデックスが範囲外」を解決する方法

  14. 14

    Python辞書インデックスエラー:リストインデックスが範囲外です

  15. 15

    リストインデックスが範囲外-Pythonで

  16. 16

    「リスト割り当てインデックスが範囲外」Pythonの問題

  17. 17

    「検索」が原因で「文字列インデックスが範囲外」になっていますか?(Python)

  18. 18

    Python:osmapiを使用してクエリを実行すると、インデックスが範囲外になります

  19. 19

    (Python)リストインデックスが範囲外-反復

  20. 20

    リストインデックスが範囲外:PYTHON

  21. 21

    Python IndexError:リストインデックスが範囲外PushBullet

  22. 22

    Python3:リストインデックスが範囲外

  23. 23

    Python3:リストインデックスが範囲外

  24. 24

    Pythonエラー:インデックスが範囲外です

  25. 25

    リストからタプル値を外挿するときにPythonインデックスが範囲外

  26. 26

    Python、リストエラー:IndexError:リストインデックスが範囲外です

  27. 27

    修正方法:Pythonで「リストインデックスが範囲外です...」

  28. 28

    BeautifulSoup(Python)で「リストインデックスが範囲外」になるのを防ぐ方法

  29. 29

    IndexError:リストインデックスが範囲外です-Python CSV

ホットタグ

アーカイブ