def password(passlist):
listt = []
for i in range(0, len(passlist)):
temp = passlist[i]
for j in range(0, len(temp)/2):
if((j+2)%2 == 0) :
t = temp[j]
temp.replace(temp[j], temp[j+2])
temp.replace(temp[j+2], t)
listt.append(temp)
我正在传递字符串列表
示例["abcd", "bcad"]
。如果i
,则每个字符串i
都将第j
个字符与(i+j)%2 == 0
字符交换。
我的代码超出了字符串的范围。
请为我建议解决此问题的更好方法
答案 0 :(得分:0)
字符串在python中是不可变的,因此您不能在适当位置交换字符。您必须构建一个新字符串。
此外,您的代码不适用于passlist
中的每个字符串。您在第一个passlist
块中的for
中的字符串中进行了迭代,但是随后在该块之外使用了temp
变量。这意味着第二个for
循环仅在最后一个字符串上进行迭代。
现在,一种执行所需操作的方法可能是:
for i in range(len(passlist)):
pass_ = passlist[i]
new_pass = [c for c in pass_] # convert the string in a list of chars
for j in range(len(pass_) / 2):
new_pass[j], new_pass[j+2] = new_pass[j+2], new_pass[j] # swap
listt.append(''.join(new_pass)) # convert the list of chars back to string
答案 1 :(得分:0)
这就是我要做的:
def password(passlist):
def password_single(s):
temp = list(s)
for j in range(0, len(temp) // 2, 2):
temp[j], temp[j+2] = temp[j+2], temp[j]
return ''.join(temp)
return [password_single(s) for s in passlist]
print(password(["abcd", "bcad"]))
password_single
)上运行的函数。这样开发和调试更加容易。在这种情况下,我将其设为内部函数,但不一定必须如此。range
调用,因为它与执行二元组+ if(index%2 == 0)
一样replace
。