使用For循环替换字符串

时间:2014-04-09 15:41:18

标签: string python-3.x

示例:

old_key = ''
key = '----'

for i in key:
  print(i)
  if all (i) == "-":
    print('nochange')
  else:
    old_key = old_key.replace(old_key,key)

  print(old_key)

输出:

----

我的方法有什么错误?由于密钥包含所有(' - '),为什么old_key已更改? 我没有正确使用所有功能吗?

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

all在可迭代上运行。不是一个单一的元素。如果您执行以下代码段:

for i in key:
    all(i) == '-'

您会多次看到False打印,这就是执行else块的原因。

摆脱循环并为if块执行此操作:

if len(set(key)) == 1 and key[0] == '-':
    print "Not changed"

上述代码的作用是,它转换列表key中的一个集合。由于python中的一个集合不能有重复的元素set(key)变得只是-。我们现在必须确保set(key)中只有一个元素,并且该元素是-if len(set(key)) == 1 and key[0] == '-':负责检查。

即,:

old_key = ''
key = '----'
if len(set(key)) == 1 and key[0] == '-':
    print "Not changed"
else:
    old_key = old_key.replace(old_key,key)

答案 1 :(得分:0)

我没有正确使用所有功能吗?

不,如果iterable中的所有参数都返回Trueall()函数将返回True。在您的情况下,传递给all时字符串的每个字符都将返回True(因为字符串被视为可迭代):

>>> all("-")
True

但是,您将执行

>>> True == "-"
False

您可以看到评估为False,导致您输入else子句,将old_key替换为key

答案 2 :(得分:0)

我自己不确定python,但看起来这就是原因:

for i in key:
  print(i)

key作为一个数组,我可以想象一个值,然后打印出来。其余的代码什么也没做,因为你正在替换'''使用key - 但没有''