拆分列表中的元组项

2 投票
3 回答
9172 浏览
提问于 2025-04-17 18:50

我想知道怎么把第二个元组拆分开。

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] 的数字。能否提供一个列表推导的解决方案?欢迎任何建议!

3 个回答

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(' - '))
2

在编程中,有时候我们需要把一些代码放在特定的地方,这样它们才能正常工作。比如说,如果你在写一个程序,想要让它在特定的条件下执行某些操作,你就需要使用一些控制结构,比如“如果”语句。这就像是在说:“如果发生了某件事,那就做这个。”

另外,代码块就像是一个小盒子,里面装着一组指令。你可以把这些指令放在一起,方便管理和执行。这样,当你需要执行这些指令时,只需要调用这个盒子就可以了。

总之,编程就是把各种指令组合在一起,让计算机按照我们的想法去做事情。理解这些基本概念后,你就能更好地写出自己的程序了。

newdata = [tuple(s for t in tu for s in t.split(' - ')) for tu in data]
# [('152', 'Farko', 'Kier'), ('153', 'Park', 'Pub')]
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)

撰写回答