是否可以在单个语句中拆分和分配字符串?

可以拆分字符串,并将一些单词分配给元组吗?

例如:

a = "Jack and Jill went up the hill"
(user1, user2) = a.split().pick(1,3) # picks 1 and 3 element in the list.

这样一个班轮可能吗?如果是这样,语法是什么。

14
投票

如果你想获得幻想,你可以使用operator.itemgetter

返回一个可调用对象,该对象使用操作数的__getitem__()方法从其操作数中获取项。如果指定了多个项,则返回一个查找值元组。

例:

>>> from operator import itemgetter
>>> pick = itemgetter(0, 2)
>>> pick("Jack and Jill went up the hill".split())
('Jack', 'Jill')

或者作为单行(没有导入):

>>> user1, user2 = itemgetter(0, 2)("Jack and Jill went up the hill".split())
9
投票

你可以做这样的事情

a = "Jack and Jill went up the hill"
user1, _, user2, _ = a.split(" ", 3)

其中_意味着我们不关心这个值,而split(" ", 3)将字符串分成4段。

2
投票

切片支持步骤参数

a = "Jack and Jill went up the hill"
(user1 , user2) = a.split()[0:4:2] #picks 1 and 3 element in the list

虽然可以在Python中编写时髦的oneliner,但肯定它不是那种练习的最佳语言。

2
投票

这样做的诀窍:

user1, user2 = a.split()[0::2][:2]

从2合2中选择序列的前两个元素。

2
投票

我宁愿用两行来做这件事,但这里有一个单行:

user1, user2 = [token for (i, token) in enumerate(a.split()) if i in (0, 2)]

这就是我要做的事情(只是为了可读性,如果将来需要更改,则引入错误的可能性更小)。

tokens = a.split()
user1 = tokens[0]
user2 = tokens[2]
1
投票

第一个出现在我脑海中的是:

>>> a = "Jack and Jill went up the hill"
>>> [e for n, e in enumerate(a.split()) if n in (0, 2)]
['Jack', 'Jill']

如果您想知道:enumerate生成元组,其中渐进数字作为第一个元素,枚举迭代元素作为第二个元素。

编辑:正如@kindall在评论中所说,最后一步将是:

>>> user1, user2 = [e for n, e in enumerate(a.split()) if n in (0, 2)]
>>> user1
'Jack'
>>> user2
'Jill'

但是我选择不做任务只是为了让例子更加重要(抱歉,如果这让某些人感到困惑)。

0
投票

启动Python 3.8,并引入assignment expressions (PEP 572)(:=运算符),我们可以先命名text.split()表达式,然后在同一行中使用它的部分并创建(user1, user2)元组:

# text = 'Jack and Jill went up the hill'
_, (user1, user2) = (parts := text.split()), (parts[0], parts[2])
# (user1, user2) = ('Jack', 'Jill')