在Python中将字符串列表转换为元组

时间:2013-11-18 23:28:44

标签: python string tuples

我正在尝试将'SUP E P I C'之类的字符串转换为包含所有非间隔字符串的元组。例如,如果输入是'SUP E P I C',那么程序应该返回('S', 'U', 'P', 'E', 'P', 'I', 'C'),我正在尝试使用明显的循环方法,我开始如下:

for ch in john:
    if ch != ' ':
        j1 += ch
    else:
        # stuff

我被卡住了,因为我可以添加元组的第一个条目,但跳过后,空间只是逃避我。任何提示将不胜感激!

2 个答案:

答案 0 :(得分:8)

元组是不可变的,因此一次构建一个项目是非常低效的。您可以将序列直接传递给tuple

>>> tuple('SUP E P I C'.replace(" ",""))
('S', 'U', 'P', 'E', 'P', 'I', 'C')

或使用生成器表达式(此示例为overkill)

>>> tuple(x for x in 'SUP E P I C' if not x.isspace())
('S', 'U', 'P', 'E', 'P', 'I', 'C')

答案 1 :(得分:3)

您的代码存在的问题是您正在尝试将字符串添加到元组中;你需要在元组中添加一个元组:

j1 = ()
for ch in john:
    if ch != ' ':
        j1 += (ch,)

通过这一点修复,您的原始代码可以正常工作。

这相当于gnibbler答案中给出的理解:

j1 = tuple(ch for ch in john if ch != ' ')

......或者就此而言,filter来电:

j1 = tuple(filter(lambda ch: ch != ' ', john))

当然,除非“其他东西”是非平凡的,否则你将无法轻易转换它;你需要坚持原来的显式循环。这没有什么不妥。