在python中统一处理元组和字符串
这是一个关于python的美学问题。基本上,它是关于元组和字符串的不同行为,比如我想添加一个条目: 字符串:在python中统一处理元组和字符串,python,string,tuples,Python,String,Tuples,这是一个关于python的美学问题。基本上,它是关于元组和字符串的不同行为,比如我想添加一个条目: 字符串: new_string = char + old_string def words(n, letters): if n == 0: return [ '' ] else: return [ c + x for x in words(n - 1, letters) for c in letters ] 元组: new_tuple = tup
new_string = char + old_string
def words(n, letters):
if n == 0:
return [ '' ]
else:
return [ c + x for x in words(n - 1, letters) for c in letters ]
元组:
new_tuple = tuple([entry]) + old_tuple
def words(n, letters):
if n == 0:
return [ tuple() ]
else:
return [ tuple([c]) + x for x in words(n - 1, letters) for c in letters ]
我可以用str(char)
替换char
,但不能用str([char])
或tuple([entry])
替换tuple(entry)
当我想统一处理元组和字符串时,这就成了一个问题,这似乎是一个好主意,因为从抽象上讲,它们本质上是相同的(只是不像上面看到的实现)
具体地说,假设我想列举所有长度n
的单词,其中的条目来自单词字母
。一种非常具有描述性的方式是:
字符串:
new_string = char + old_string
def words(n, letters):
if n == 0:
return [ '' ]
else:
return [ c + x for x in words(n - 1, letters) for c in letters ]
元组:
new_tuple = tuple([entry]) + old_tuple
def words(n, letters):
if n == 0:
return [ tuple() ]
else:
return [ tuple([c]) + x for x in words(n - 1, letters) for c in letters ]
我想出的统一处理这两个病例的最佳方法是:
def words(n, letters):
word_type = type(letters)
if n == 0:
return [ word_type() ]
else:
return [ letters[i:i+1] + x for x in words(n - 1, letters) for i in xrange(len(letters)) ]
这是较少的描述
有没有更优雅的方法?这似乎是个好主意,因为从抽象上讲,它们本质上是相同的东西-我不同意-字符串和元组非常不同,我看不出以相同的方式处理它们的用例-为什么要这样做?看起来你接受了字符串和字母元组-最好的答案可能是在这一点之前将它们统一为一种类型。我同意@Latty。您能描述一下需要对元组和字符串执行此操作的用例吗?那么字符串和字符元组之间的抽象区别是什么?(注意:答案不应该包含“Python没有字符类型”这句话。)事实上,有些编程语言中字符串就是字符的元组。用例是:我让学生做类似上面的事情。在大多数语言中,“words”有一个明显的类型,但在Python中有两个,所以我希望我的示例代码能够同时使用这两种类型。