如何选择函数返回的x元组中的某些元素?

2 投票
5 回答
1832 浏览
提问于 2025-04-15 14:43

我刚开始学习Python。考虑一下这个函数 str.partition(),它会返回一个包含三个元素的元组。如果我只对这个元组中的第0个和第2个元素感兴趣,最好的方法是什么来挑选出这些特定的元素呢?

我现在可以这样做:

# Introduces "part1" variable, which is useless
(part0, part1, part2) = str.partition(' ')

或者:

# Multiple calls and statements, again redundancy
part0 = str.partition(' ')[0]
part2 = str.partition(' ')[2]

我想能够做 这样的事情,但现在还做不到:

(part0, , part2) = str.partition(' ')
# Or:
(part0, part2)   = str.partition(' ')[0, 2]

5 个回答

2

我觉得我之前问过的一个问题可能对你有帮助:

用Python的方式获取矩阵中的一些行

NumPy提供了一种切片的语法,可以让你用一组索引来提取不同的元素。不过,我觉得你可能不想把你的字符串列表转换成numpy.array,只是为了提取几个元素。所以,也许你可以写一个辅助函数:

def extract(lst, *indices):
    return [lst[i] for i in indices]

item0, item2 = extract(str.partition(' '), 0, 2)
4

没错,你不能一次性从一个元组列表中取出多个临时元素。

part0, part1, part2 = str.partition(' ')

这样做是对的。如果你不需要part1,那就不用担心它。通常会称它为“虚拟”或“未使用”,表示它没有被用到。

你可以用比较丑陋的方式来处理:

part0, part2 = str.partition(' ')[::2]

在这种特定情况下可以这样做,但这样会让代码变得难以理解,对其他人不太友好。;)

13

下划线通常用来表示一些你不需要的东西,所以像这样用是可以的:

part0, _, part2 = str.partition(' ')

在这个特定的情况下,你可以这样做,但这并不是一个很好的解决方案:

part0, part2 = str.partition(' ')[::2]

还有一种比较复杂的解决方案:

from operator import itemgetter
part0, part2 = itemgetter(0, 2)(str.partition(' '))

撰写回答