比方说,你有这样的情况:是否有一系列一次性变量的简写语法?
_, _, _, substring_1, _, substring_2 = some_string.split(',')
是否有表达的前三个连续的下划线,表示要丢弃的值的简写方式?我特别想知道是否存在这样的句法快捷方式,而不是完成相同任务的各种方式。
编辑 - 我对Python 2.7特定的答案感兴趣。
比方说,你有这样的情况:是否有一系列一次性变量的简写语法?
_, _, _, substring_1, _, substring_2 = some_string.split(',')
是否有表达的前三个连续的下划线,表示要丢弃的值的简写方式?我特别想知道是否存在这样的句法快捷方式,而不是完成相同任务的各种方式。
编辑 - 我对Python 2.7特定的答案感兴趣。
不是语法捷径,但你可能想使用itemgetter
函数从operator
模块:
from operator import itemgetter
my_pair = itemgetter(3, 5)
substring_1, substring_2 = my_pair(some_string.split(','))
或者定义my_pair
换到split
以及呼叫:
def my_pair(x):
return itemgetter(3,5)(x.split(','))
substring_1, substring_2 = my_pair(some_string)
您可以仅使用str.rsplit
并提供限制:
>>> s = 'a,b,c,d,e,f'
>>> s.rsplit(',', 3) # i.e. split on at most three commas, from the right
['a,b,c', 'd', 'e', 'f']
>>> _, d, _, f = s.rsplit(',', 3)
>>> d
'd'
>>> f
'f'
如果升级到Python 3.x中,你可以使用*_
吸收元素任意数量的(你会得到一个2.X SyntaxError
,虽然):
>>> *_, d, _, f = s.split(',')
>>> d
'd'
>>> f
'f'
是,如果你正在使用Python 3 和你不在乎是否有多于或少于3项前的最后3:
*_, first, _, second = somestring.split(',')
否则,如果你想最后个3个元素(不管有多少项的字符串有),可以使用str.rsplit
为Jon points out:
_, first, _, second = s.rsplit(',', 3)
如果你想在第3和第5元素(无论字符串有多少个元素了),你可以使用chepner's answer :
from operator import itemgetter
extract = itemgetter(3, 5)
first, second = extract(s.split(','))
最后,如果必须在字符串中六个条目,最好的办法是要明确:
KeyFields = namedtuple('KeyFields', 'first second')
def extract_key_fields(s):
data = s.split(",")
if len(data) != 6:
raise ValueError("Must provide six fields")
return KeyFields(data[3], data[5])
key_fields = extract_key_fields(somestring)
key_fields.first # d
key_fields.second # f
谢谢 - upvote的答案。我应该指定我对Python 2.7中的这一点感兴趣。我已经编辑了相应的问题。 – Boa
Python的哪个版本? – jonrsharpe
@jonrsharpe - python 2.7 – Boa
这是一个很好的语法,我在Prolog中非常享受。我喜欢用Python做它,但据我所知(至少在Python 2中),下划线是一个普通变量,不是该语言的真正特征,编码人员将它用作可抛出变量的约定。此外,似乎有很好的理由使用__(两个下划线)而不是_(请参阅http://docs.python-guide.org/en/latest/writing/style/) –