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