からタプルのリストを構築は、私はこれらのようなリストの二つのリストを持つ2つのネストされたリストを効率的
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')], [('salt', 'PRP'), ('water', 'NN')]]
どのようにすることができますそれはメモリ効率的な方法で行うのですか?
からタプルのリストを構築は、私はこれらのようなリストの二つのリストを持つ2つのネストされたリストを効率的
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')], [('salt', 'PRP'), ('water', 'NN')]]
どのようにすることができますそれはメモリ効率的な方法で行うのですか?
あなたはすることができますいくつかをlist comprehensions
とsplit()
と012を使用して達成する以下のような組み込み関数:
new_lista = [lista[i][2:-2].split() for i in range(len(lista))]
new_listb = [listb[i][2:-2].split("', '") for i in range(len(listb))]
res = [list(zip(a, b)) for a, b in zip(new_lista, new_listb)]
出力:
>>> res
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')], [('salt', 'PRP'), ('water', 'NN')]]
あなたはこれを試すことができます。
import itertools
lista = ["['we could use that']", "['salt water']"]
listb = ["['PRP', 'VBP', 'NNP', 'NN']", "['PRP', 'NN']"]
lista = itertools.chain.from_iterable([[b.split() for b in eval(i)] for i in lista])
listb = [eval(i) for i in listb]
final_list = [[(c, d) for c, d in zip(a, b)] for a, b in zip(lista, listb)]
出力:
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')], [('salt', 'PRP'), ('water', 'NN')]]
あなたはリストの内包表記を使用し、その後、ast.literal_eval()
でリストを解析することができ、例えば:
>>> from ast import literal_eval
>>> lista = [literal_eval(x) for x in lista]
>>> listb = [literal_eval(x) for x in listb]
>>> [list(zip(a[0].split(), b)) for a, b in zip(lista, listb)]
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')], [('salt', 'PRP'), ('water', 'NN')]]
はここより防弾ソリューションです。最初のリストは正規表現で解析されます。 ast.literal_eval
を有する第二:
x1 = [str(x).split() for x in map(lambda x: re.sub(r"[\[\]']", '', x), lista)]
x2 = map(ast.literal_eval, listb)
res = [list(zip(a, b)) for a, b in zip(x1, x2)]
print(res)
出力:
[[('we', 'PRP'), ('could', 'VBP'), ('use', 'NNP'), ('that', 'NN')],
[('salt', 'PRP'), ('water', 'NN')]]
あなたが最初のリスト内の単語の前後に引用符を追加してくださいことはできますか?さもなければ、これは解決するために非常に面倒な問題になります。 –
@cᴏʟᴅsnどのようにすべてのネストされたリストに対してそれを行いますか?はい、私はそれを行うことができます、私はタプルを構築するためにリストの理解を使用することができます。引用符を意図している場合は – 0x1
は、あなたはおそらく 'ast.literal_eval'を使用する必要があると' zip' – MSeifert