Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中统一处理元组和字符串_Python_String_Tuples - Fatal编程技术网

在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

这是一个关于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 = 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中有两个,所以我希望我的示例代码能够同时使用这两种类型。