将字符串分割并添加到`tuple`中

5 投票
4 回答
3022 浏览
提问于 2025-04-17 13:01

我知道只有两种简单的方法可以把一个字符串分割开,然后放进一个tuple里。

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 个回答

1

还有一个其他的选择:

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

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

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

把东西分成n个长度的小组的方法,直接来自于zip()的文档说明。

2

通常情况下,当你需要的元素数量和类型是固定的,就会用元组(tuple);而当你需要的元素数量不确定,且类型相同的时候,就会用列表(list)。

那么在这里,为什么要用tuple而不是list呢?

元组的例子:

  • 在一个固定维度的空间中的坐标(比如二维坐标:(x, y)
  • 字典中的键值对表示(例如:("John Smith", 38)
  • 在计算表达式之前就知道元组中有多少个元素的情况
  • ...

列表的例子:

  • 分割后的字符串(比如:"foo|bar|buz" 按照|分割后变成:["foo", "bar", "buz"]
  • 命令行参数(例如:["-f", "/etc/fstab"]
  • 在计算表达式之前通常不知道列表中有多少个元素的情况
  • ...
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))

如果你真的想要一个元组的话。

撰写回答