0

これは重複した質問かもしれませんが、リストのリストをアンパックし、アンパックされた結果から変数を作成する方法があることを知りたいですか? 次のようなファイルにデータがあります。

'[416213688, 422393399, 190690902, 81688],| [94925847, 61605626, 346027022],| [1035022, 1036527, 1038016]'

だから私はファイルを開いてそれをリストにします

with open ('data.txt', "r") as f:
   a = f.read()
a = a.split("|")
print(*a)

出力:

[416213688, 422393399, 190690902, 81688], [94925847, 61605626, 346027022], [1035022, 1036527, 1038016]

これは、プログラムの次のステップに必要な出力です。しかし、この結果aをさらに使用するために変数にすることはできません。SyntaxError: can't use starred expression here試してみると、次のようになります。

a = (*a) 

を使用して作成しようとしましたzipが、質問zip 関数で誤った出力を与えるで説明されているのと同様に、誤った出力が得られます。

<zip object at 0x0000000001C86108>

リストのリストをアンパックして次のような出力を得る方法はありますか?

[1st list of variables], [2nd  list of variables], [etc...]

itertools を使用すると、次のようになります。

   l = list(chain(*a))
   Out: ['[', '4', '1', '6', '2', '1', '3', '6'...

それは必須ではありません

したがって、機能するオプションはhttps://stackoverflow.com/a/46146432/8589220です。

 row_strings = a.split(",| ")
 grid = [[int(s) for s in row[1:-1].split(", ")] for row in row_strings]
 print(",".join(map(str, grid)))
4

2 に答える 2

1

以下は、文字列を 2 次元グリッド (つまり、それ自体が整数のリストを含むリスト) に解析する手っ取り早い汚い方法です。

row_strings = a.split(",| ")
grid = [[int(s) for s in row[1:-1].split(", ")] for row in row_strings]
print("\n".join(map(str, grid)))
# Out:
# [416213688, 422393399, 190690902, 81688]
# [94925847, 61605626, 346027022]
# [1035022, 1036527, 1038016]
于 2017-09-10T23:23:51.367 に答える
0

生の出力から始めましょう(手動で文字列を作成するだけですが、これは読み取りメソッドと同等です)

a = '[416213688, 422393399, 190690902, 81688],| [94925847, 61605626, 346027022],| [1035022, 1036527, 1038016]'

これで、1 つの長い文字列になりました。文字列のリストにしましょう

a = a.split(',|')

私は「、|」をしました '|' の代わりに コンマも削除したいからです。

これで、次のようになります。

>>> ['[416213688, 422393399, 190690902, 81688]', ' [94925847, 61605626, 346027022]', ' [1035022, 1036527, 1038016]']

配列のように見える文字列のリストです。これらの文字列を整数の配列に変換しましょう。これを行う 1 つの方法は、ast.literal_eval()を使用することです。これは、文字列を引数として取り、その文字列にあるものを Python リテラルとして解釈しようとします。先頭の空白は好きではないので、最初に で削除し.strip()ます。

import ast
a = [ast.literal_eval(arr.strip()) for arr in a]

aこれが行うことは、の各文字列を取得しliteral_eval、それらをリストに入れることです。

これにより、必要なコードが返されます。

[[416213688, 422393399, 190690902, 81688], [94925847, 61605626, 346027022], [1035022, 1036527, 1038016]]
于 2017-09-10T23:30:52.200 に答える