2

我是 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]
4

5 回答 5

13

下划线通常用作你不需要的东西的名称,所以这样的事情会起作用:

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

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

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

一个更深奥的解决方案:

from operator import itemgetter
part0, part2 = itemgetter(0, 2)(str.partition(' '))
于 2009-10-01T07:52:38.343 回答
4

正确,您不能一次从元组列表中取出几个临时元素。

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

是要走的路。不用担心part1,如果你不需要它,你就不需要它。通常称其为“虚拟”或“未使用”以表明它未使用。

你可以通过以下方式变得丑陋:

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

在这种特定情况下,但这很容易混淆并且对其他人不好。;)

于 2009-10-01T07:52:34.350 回答
2

我想我前段时间问的一个问题可以帮助你:

获取矩阵的某些行的 Pythonic 方法

NumPy 为您提供了要使用元组或索引列表提取各种元素的切片语法,但我认为您不想将字符串列表转换为 numpy.array 只是为了提取一些元素,所以也许你可以写一个助手:

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

item0, item2 = extract(str.partition(' '), 0, 2)
于 2009-10-01T07:52:31.823 回答
1

你也可以使用str.split(' ', 1)而不是str.partition(' ')

你会得到一个列表而不是一个元组,但你不会得到分隔符

于 2009-10-01T15:35:51.750 回答
0

我会这样做:

all_parts = str.partition(' ')
part0, part2 = all_parts[0], all_parts[2]
于 2009-10-01T19:49:32.387 回答