4

出力としてpythonリストを生成するプログラムがあります。リストはネストされたリストです。列形式で印刷できるようにしたいリスト[名前、住所、電話番号]のリスト。質問は非常に単純なアイデアであると述べているようですが、リストからデータを抽出する簡単な方法を見つけることができませんでした。print(list) すると、リスト内の各項目について ['name','address','phone number'] などのようになります。Windows プラットフォームで Python 3 を使用しています。注: 私は OOP プログラマーではありません (現時点では)

よろしくビル

4

5 に答える 5

2

次のようにリストを反復処理します。

for name,add,num in lis:
   print (name,add,num)

デモ:

>>> lis = [['name','address','phone number']]
>>> for name,add,num in lis:
...        print (name,add,num)
...     
name address phone number

見栄えの良い出力を得るために、文字列の書式設定を使用することもできます。

>>> lis = [['name','address','phone number']]
>>> for name,add,num in lis:
       print ("{:<10}{:^20}{:^10}".format(name,add,num))
...     
name            address        phone number
于 2013-07-07T18:25:39.083 に答える
2

prettytable非常に見栄えの良い ASCII テーブルを作成できます。チュートリアルの例:

from prettytable import PrettyTable

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x

このようなものを印刷する必要があります

+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Adelaide  | 1295 |  1158259   |      600.5      |
| Brisbane  | 5905 |  1857594   |      1146.4     |
| Darwin    | 112  |   120900   |      1714.7     |
| Hobart    | 1357 |   205556   |      619.5      |
| Sydney    | 2058 |  4336374   |      1214.8     |
| Melbourne | 1566 |  3806092   |      646.9      |
| Perth     | 5386 |  1554769   |      869.4      |
+-----------+------+------------+-----------------+

この例をユースケースに適応させることは簡単です。

于 2013-07-07T19:30:40.397 に答える
1
for name, address, phone_number in a_list:
    print '{}\t{}\t{}'.format(name, address, phone_number)
于 2013-07-07T18:26:28.920 に答える
1

たとえば、すべてのフィールドを 20 文字幅にしたい場合は、print ステートメントを使用できます。

for e in list:
    name, address, phone = e
    print "%20s %20s %20s" % (name, address, phone)
于 2013-07-07T18:26:32.483 に答える
0

与えられた他の回答は、フィールドサイズを超えるとレコードを切り捨てます。代わりにラップしたい場合は、textwrapモジュールを使用する必要があります。

import textwrap
import itertools

col_width = 20

header = ["Name", "Address", "Phone Number"]

def columnar_record(record):
    columns = (textwrap.wrap(item, col_width) for item in record)
    line_tuples = itertools.zip_longest(*columns, fillvalue="")
    lines = ("".join(item.ljust(col_width) for item in line_tuple)
             for line_tuple in line_tuples)
    return "\n".join(lines)

def print_columns(records):
    print(columnar_record(header))
    for record in records:
        print(columnar_record(record))

a = ["Bill Bradley", "123 North Main St., Anytown, NY 12345", "800-867-5309"]
b = ["John Doe", "800 South Main Street, Othertown, CA 95112", "510-555-5555"]

print_columns([a, b])
于 2013-07-07T18:59:32.267 に答える