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

您可以使用列表理解:

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 回答
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 回答
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 回答