1

私は次のようなPythonの巨大なリストを持っています:

('foo','bar','foo/bar','foo1','bar/1')

上記の各値は、リストに含まれる文字の多様性を示しています-aplhanumericとslash。そのリストを次のようにタプルのリストに変換する方法が必要です。

(('foo','foo'),('bar','bar'),('foo/bar','foo/bar'),('foo1','foo1'),('bar/1','bar/1'))

では、これを行うには、正規表現の検索と置換よりも優れた方法はありますか?(私が間違っている場合は私を訂正してください)。

したがって、技術的にはコンマも引用符の間にあるため、コンマを除いて引用符の間にあるものすべてを一致させようとしています。私は先読みと後読みを使用して、何にでも一致させました。

(?<=')(.*?)(?=')

ただし、これは引用符とコンマ内の値にのみ一致します。必要なのは、値とコンマを除く引用符を一致させ、置換正規表現を使用してリストを上記のタプルのように見せることです。

リストが膨大なため、手作業で行うことはできません。

何かご意見は?

4

1 に答える 1

2

OK、あなたは巨大なlist文字列を持っています。が必要ですtuple。ここで、の各要素に対してlist、ペアがあり(element, element)ます。

2.xではそのようなペアのaを返すか、3.xではイテレータをzip返すことを除いて、これはまさにそのとおりです。listいずれにせよ、をtuple呼び出すだけでそれをに変換できますtuple。それで:

tuple(zip(huge_list, huge_list))

より一般的には、シーケンスを要素ごとに変換する場合は、内包表記またはジェネレータ式を使用できます。tuple「タプル内包表記」はありませんが、ジェネレータ式を関数に渡すだけで同じことができます。それで:

tuple((element, element) for element in huge_list)

または、ペアの代わりにtupleペアのを必要とする場合:(s[0], s[1:])(s, s)

tuple((element[0], element[1:]) for element in huge_list)

等々。

一方、オブジェクトをそのオブジェクトに変換reprして正規表現変換を実行し、それを再解析することがPythonで良い考えになるような状況は考えられません。これは単なる「2つの問題がある」問題ではありません。結果の文字列を解析すること(そして、安全性を気にしない場合でも、どこで物事を処理するかを理解することeval(repr(x)) != x)は、最初から何よりも難しい問題になります。ですから、もしあなたがその仕事をしようとしていることに気づいたら、一歩下がってください。

于 2013-02-21T20:10:41.463 に答える