更新元组列表中的值

2024-05-31 23:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要遍历所有元组,并将元组的第二项的值更改为第一个“/”后面的两个第一个字母(AA/BB/CC将变成AA)

为了名单

[[("AA","AA/BB/AA"),("QQ","AB/AA")],[("CC","CC/SS/AA"),("QQ","CC/CC")],...]

将返回以下内容:

[[("AA","AA"),("QQ","AB")],[("CC","CC"),("QQ","CC")],...]

我知道如何做循环和改变元组列表和元组回来。。。但是有没有一种方法可以用更短的方式来做呢?你知道吗

提前谢谢你的帮助!!你知道吗


Tags: 方法列表ab字母方式ssaacc
1条回答
网友
1楼 · 发布于 2024-05-31 23:40:03

要对字符串进行单个替换,可以使用^{}将字符串按斜杠拆分。str.split将返回它从字符串中提取的子字符串的列表。因为您只对第一个斜杠之前的子字符串感兴趣,所以只需要获取结果列表的第一个元素。您可以进一步使用maxsplit参数来限制str.split多次拆分字符串(使其更早地停止处理字符串)。你知道吗

>>> 'AA/BB/CC'.split('/')
['AA', 'BB', 'CC']
>>> 'AA/BB/CC'.split('/', 1)
['AA', 'BB/CC']
>>> 'AA/BB/CC'.split('/', 1)[0]
'AA'

现在要在列表中执行替换,您有两个选择:要么就地替换列表,必要时更新每个元素,要么创建一个新列表,在其中动态应用转换。请注意,由于元组是不可变的,因此始终必须创建新元组。因为这通常是解决问题的首选方法,所以我只向您展示如何使用列表理解进行第二种方法。但是,如果您想在适当的位置替换这些元素,您只需在列表中循环并更新列表项。你知道吗

>>> lst = [[("AA", "AA/BB/AA"), ("QQ", "AB/AA")], [("CC", "CC/SS/AA"), ("QQ", "CC/CC")]]
>>> [[(a, b.split('/', 1)[0]) for a, b in x] for x in lst]
[[('AA', 'AA'), ('QQ', 'AB')], [('CC', 'CC'), ('QQ', 'CC')]]

列表理解通常如下所示:

[t(x) for x in sequence]

对于sequence中的每个元素x,它会将转换t应用于元素x,并将其作为元素放入列表中。所以[x for x in lst]将返回一个相同的列表t将是identify函数。你知道吗

元素x也可以是未打包的元组。如果源列表中的元素是两个元素元组,那么可以使用[t(a, b) for a, b in lst]从元组中解压元素,应用转换并将其放入结果列表。你知道吗

在您的例子中,我们要解压元组,这样就可以只处理第二个元素。但是我们也希望它是一个元组,所以我们再次将结果放入元组:[(a, t(b)) for a, b in x]。在本例中,转换t将是我前面显示的分裂。你知道吗

现在,因为您的列表实际上不是一个元组列表,而是一个元组列表,所以我们必须嵌套两个列表理解。类似于上面的[[y for y in x] for x in lst]将再现一个列表列表。现在,由于内部列表是元组列表,我们可以在那里对元组执行转换并将所有内容放在一起。你知道吗

相关问题 更多 >