我正在尝试将'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
我被卡住了,因为我可以添加元组的第一个条目,但跳过后,空间只是逃避我。任何提示将不胜感激!
答案 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))
当然,除非“其他东西”是非平凡的,否则你将无法轻易转换它;你需要坚持原来的显式循环。这没有什么不妥。