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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在单个语句中拆分和分配字符串?相关的知识,希望对你有一定的参考价值。

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

例如:

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

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

答案

如果你想获得幻想,你可以使用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())
另一答案

你可以做这样的事情

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

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

另一答案

切片支持步骤参数

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,但肯定它不是那种练习的最佳语言。

另一答案

这样做的诀窍:

user1, user2 = a.split()[0::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]
另一答案

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

>>> 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'

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

另一答案

启动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')

以上是关于是否可以在单个语句中拆分和分配字符串?的主要内容,如果未能解决你的问题,请参考以下文章

vue.js 2 - 将单个文件组件的 html 片段提取到独立文件中

使用单个字符或仅一个字符串来提升拆分

如何在字符串中拆分和添加单个值?

在单个语句中创建和调用匿名函数

如何在不破坏单词的情况下将字符串拆分为行?

在 if 语句中评估单个字符:C++