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

时间:2011-11-30 19:08:59

标签: python

是否可以拆分字符串,并将某些单词分配给元组?

例如:

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

这样的一个班轮是否可行?如果是这样,语法是什么。

7 个答案:

答案 0 :(得分: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())

答案 1 :(得分:9)

你可以做这样的事情

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

其中_表示我们不关心该值,split(" ", 3)将字符串拆分为4个段。

答案 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]

答案 3 :(得分: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,但肯定它不是那种练习的最佳语言。

答案 4 :(得分:2)

这就是诀窍:

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

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

答案 5 :(得分: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'

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

答案 6 :(得分: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')