拆分一个字符串并添加到`tuple`中

时间:2012-02-14 16:26:16

标签: python

我只知道分割字符串并添加到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 个答案:

答案 0 :(得分:5)

我会去

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

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

答案 1 :(得分:2)

通常在尺寸/长度固定时(可能使用不同的类型)使用元组,并且当存在任意数量的相同类型的值时列出。

在这里使用tuple代替list的原因是什么?

元组样本:

  • 固定维空间中的坐标(例如2d:(x, y)
  • dict键/值对的表示(例如("John Smith", 38)
  • 在评估表达式
  • 之前知道元组件数量的事情
  • ...

列表样本:

  • 分割字符串{"foo|bar|buz"已分割在| s:["foo", "bar", "buz"]
  • 命令行参数(["-f", "/etc/fstab")
  • 在评估表达式之前(通常)不知道列表元素的数量
  • ...

答案 2 :(得分:1)

另一种选择:

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

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

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

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

答案 3 :(得分: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')]

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