是否可以拆分字符串,并将某些单词分配给元组?
例如:
a = "Jack and Jill went up the hill"
(user1, user2) = a.split().pick(1,3) # picks 1 and 3 element in the list.
这样的一个班轮是否可行?如果是这样,语法是什么。
答案 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')