我是python的新手,我想写一个函数,它接受一个字符串并返回该字符串所有可能的大小写的列表。这就是它:
def transform_capitalize(st):
l=[]
l.append(st.lower())
newl=l
length=len(st)
for x in range(0,length):
for i in l:
newl.append(i[:x]+i[x].upper()+i[(x+1):])
l=newl
return l逻辑如下:
获取字符串并转换为小写转换,然后放入列表中,然后在循环中进行循环,获取每个字母为大写的可能性,一次一个,并在每个字母位置之后更新列表。
以Foo为例,l=['foo'],长度为3,因此从0到2,取列表中的每个元素,并将第i个位置的字母大写,将这些字母附加到newl,然后在该位置的所有大写完成后更新列表,因此当i =0时,列表的末尾应为["foo","Foo"]。
对于i =1,它应该是["foo","Foo""fOo","FOo"];对于2,它应该是['foo', 'Foo', 'fOo', 'FOo', 'foO', 'FoO', 'fOO', 'FOO']。顺序并不重要,但更多的原因是我得到了一个内存错误,所以我假设它是一个无限循环。
有人能告诉我出了什么问题吗?
发布于 2016-02-24 13:14:02
这两行就是问题所在:
newl=l
l = newl当您为变量分配数组时,默认行为是让变量充当引用,而不是副本。这意味着,如果您为a分配一个空列表,那么您将a分配给b,将任何内容附加到b或a都是相同的。
a = []
b = a
b.append("hello")
print(a) # prints ["hello"]要在python中复制数组,可以使用切片:
a = []
b = a[:] #here
b.append("hello")
print(a) # prints []现在,在需要时将引用赋值更改为复制:
def transform_capitalize(st):
l=[]
l.append(st.lower())
newl=l[:]
length=len(st)
for x in range(0,length):
for i in l:
newl.append(i[:x]+i[x].upper()+i[(x+1):])
l=newl[:]
return l
transform_capitalize("hello"); #['hello', 'Hello', 'hEllo', 'HEllo', 'heLlo', 'HeLlo', 'hELlo', 'HELlo', 'helLo', 'HelLo', 'hElLo', 'HElLo', 'heLLo', 'HeLLo', 'hELLo', 'HELLo', 'hellO', 'HellO', 'hEllO', 'HEllO', 'heLlO', 'HeLlO', 'hELlO', 'HELlO', 'helLO', 'HelLO', 'hElLO', 'HElLO', 'heLLO', 'HeLLO', 'hELLO', 'HELLO']发布于 2016-02-24 13:27:03
也可以使用递归解决方案:
def transform_capitalize(st):
result = []
if len(st) > 0:
head = st[0]
tails = transform_capitalize(st[1:])
for t in tails:
result.append( head.lower() + t )
result.append( head.upper() + t )
else:
result = [ '' ]
return result给定一个空字符串,它将返回一个空字符串。如果这不是我们想要的(通过将停止条件的长度设置为1而不是0),可以对其进行修改。
发布于 2016-02-24 13:38:49
我很无聊,所以这里是你的函数的一个“包含电池”的版本:
from itertools import product
from string import upper, lower
def capitalize(word):
word = word.lower()
for p in product([upper, lower], repeat=len(word)):
yield ''.join(fn(letter) for fn, letter in zip(p, word))
if __name__=='__main__':
print list(capitalize('foo'))https://stackoverflow.com/questions/35593676
复制相似问题