2

2番目のタプルを分割するにはどうすればよいですか

data = [('152', 'Farko', 'Kier'), ('153', 'Park - Pub')]

この出力を取得するには:

[('152', 'Farko', 'Kier'), ('153', 'Park',  'Pub')]

私はこの方法を試しました:

lst = []
for i in data:
    if len(i) == 2:
        i[1] = tuple(i[1].split(' - '))
    lst.append(i)

例外が発生した場合を除いて、機能しますTypeError: 'tuple' object does not support item assignment。しかし、タプルi = tuple(i[1].split(' - '))の位置にある番号を保持する必要があるため、割り当てることができません。i[0]リスト理解ソリューションは大歓迎です。提案?

4

3 に答える 3

2
newdata = [tuple(s for t in tu for s in t.split(' - ')) for tu in data]
# [('152', 'Farko', 'Kier'), ('153', 'Park', 'Pub')]
于 2013-03-12T17:40:56.773 に答える
2

リスト内包表記を使用できます。

lst = [t[:1] + tuple(t[1].split(' - ')) if len(t) == 2 else t for t in data]

または、ループを調整して新しいタプルを作成することもできます。

for i in data:
    if len(i) == 2:
        i = i[:1] + tuple(i[1].split(' - '))
    lst.append(i)
于 2013-03-12T17:40:10.083 に答える
1

ご覧のとおり、タプルを変更することはできませんが、必要なデータを使用して新しいタプルを作成することはできます。

data = [('152', 'Farko', 'Kier'), ('153', 'Park - Pub')]
lst = []
for i in data:
    if len(i) == 2:
        i = i[:1] + tuple(i[1].split(' - '))
    lst.append(i)

または、元のリストを変更する場合:

for i, tup in enumerate(data):
    if len(tup) == 2:
        data[i] = tup[:1] + tuple(tup[1].split(' - '))
于 2013-03-12T17:40:59.393 に答える