将字符串分割并添加到元组中

5
我知道只有两种简单的方法可以将字符串分割并添加到元组中。
import re

1. tuple(map(lambda i: i, re.findall('[\d]{2}', '012345'))) # ('01', '23', '45')

2. tuple(i for i in re.findall('[\d]{2}', '012345')) # ('01', '23', '45')

有其他简单的方法吗?
4个回答

6

我会选择

s = "012345"
[s[i:i + 2] for i in range(0, len(s), 2)]

或者

tuple(s[i:i + 2] for i in range(0, len(s), 2))

如果您确实需要一个元组。

我通常会避免使用正则表达式,除非真的需要,但在这种情况下,我会只做 tuple(re.findall('..', s)) - Steven Rumbalski

2
通常情况下,当维度/长度固定(可能类型不同)时,使用元组,而当有相同类型的任意数量值时,则使用列表。
那么在这里使用元组而不是列表的原因是什么?
元组的示例:
- 固定维度空间中的坐标(例如2D:(x, y)) - dict键/值对的表示(例如("John Smith", 38)) - 在评估表达式之前已知元组成分数量的事物 - ...
列表的示例:
- 分离字符串("foo|bar|buz"通过 "|" 分隔:["foo", "bar", "buz"]) - 命令行参数(["-f", "/etc/fstab"]) - 通常在评估表达式之前不知道列表元素数量的事物 - ...

“元组”是必需的,因为我使用的库需要一个。 - tomas
好的,但是库需要一个精确的 n 元组(其中 n 是固定的)。假设库需要 3 元组,那么我会采用显式方式:call_library((arg1, arg2, arg3))。或者当您非常确定列表的长度时:call_library(tuple(my_3_element_list)) - Johannes Weiss
好的,谢谢,我明白了。尽管如此,我认为我的观点是正确的。那不是元组,而是列表! - Johannes Weiss

1

另一种选择:

s = '012345'
map(''.join, zip(*[iter(s)]*2))

或者如果你需要一个元组:

tuple(map(''.join, zip(*[iter(s)]*2)))

将项目分组为n长度组的方法直接来自于zip()的文档。


嗯..+1,一个非常有趣的解决方案! - tomas

0

Python 3

在这里,我假设 OP 定义的“更简单”是不使用正则表达式。

给定一个字符串列表 ["jim_bob", "slim_jim"],它们具有一些共同的模式:

fileNameToTupleByUnderscore = lambda x: tuple(x.split('_'))
print(list(map(fileNameToTupleByUnderscore, ["jim_bob", "slim_jim"])))

返回

[('jim', 'bob'), ('slim', 'jim')]

请注意,如果您想排除尾随的下划线,可以在split('_')之前添加strip('_')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接