如何选择函数返回的x元组中的某些元素?
我刚开始学习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
我觉得我之前问过的一个问题可能对你有帮助:
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(' '))