【问题标题】:Looping over a list and printing those elements of a string循环列表并打印字符串的这些元素
【发布时间】:2017-10-26 13:43:21
【问题描述】:

所以我需要创建一个函数,它遍历整数列表并以这些整数作为索引打印字符串的字符。像这样的:

printString('123456789',[1,7,5,3])
2
8
6
4

我有这个:

def printString(s,list):
    i=0
    resultString=str()
    for i in range(len(list)):
        resultString= s[list[i]]
        i=i+1
    print (resultString)

但它只打印字符串的第一个字符,我猜是for循环有问题,我只是不知道它是什么。

任何帮助都会很有用!谢谢你

【问题讨论】:

  • 你可以改进你的循环本身:而不是for i in range(len(list))后跟list[i],只需使用for i in list。无需创建范围来生成索引然后检索项目。循环构造会为您做到这一点。
  • 代码的附加说明:i=0 没有任何作用,当您在循环中重用 i 时,该值将被覆盖。 resultString=str() 行也毫无用处,因为您在使用变量之前在循环中重新分配给 resultString。最后,语句i=i+1 也没有任何作用,因为i 被循环构造覆盖。因此,您可以删除这三行而不改变程序的结果。

标签: python string list for-loop


【解决方案1】:

您只需要将 print 语句放在 for 循环中。它只打印最后一个元素,因为它每次都会被覆盖。你也可以这样简单

def printString(s,list):
resultString=str()
for i in range(len(list)):
    resultString= s[list[i]]
    print (resultString)

【讨论】:

    【解决方案2】:

    将您的参数作为测试用例:

    #!/usr/bin/python
    
    def printString(strng, indexes):
        return ''.join((c for i,c in enumerate(strng) if i in indexes))
    

    这使用enumerate() 和一个生成器。

    【讨论】:

      【解决方案3】:

      移动 print(resultString) 使其位于循环内。

      def printString(s,list):
          i=0
          resultString=str()
          for i in range(len(list)):
              resultString= s[list[i]]
              i=i+1
              print (resultString)
      

      额外但非必要的建议:

      您不需要i=0i=i+1,因为for 循环已经为您完成了创建和增加值的工作。

      def printString(s,list):
          resultString=str()
          for i in range(len(list)):
              resultString= s[list[i]]
              print (resultString)
      

      您不需要resultString=str(),因为Python 非常乐意在函数中间创建一个新变量,而无需任何关于其类型应该是什么的提示。

      def printString(s,list):
          for i in range(len(list)):
              resultString= s[list[i]]
              print (resultString)
      

      您根本不需要resultString,因为您只使用了一次它的值。

      def printString(s,list):
          for i in range(len(list)):
              print (s[list[i]])
      

      如果您对索引没有特定需求,最好迭代列表的元素而不是其索引。

      def printString(s,list):
          for idx in list:
              print (s[idx])
      

      尽量不要使用与内置类型名称相同的变量名。

      def printString(s,seq):
          for idx in seq:
              print (s[idx])
      

      【讨论】:

        【解决方案4】:

        这里有几个问题。首先,print 语句应该在循环内缩进。其次,即使在这里无害,您也不应该自己操纵i,而是让for 循环为您完成。最后,list 是一个可怕的变量名称,因为它隐藏了 python 的内置列表。把它们放在一起,你会得到这样的东西:

        def printString(s, lst):
            for i in range(len(lst)):
                resultString = s[lst[i]]
                print (resultString)
        

        【讨论】:

          【解决方案5】:

          这是因为您没有将所有结果附加到字符串中,这会给您答案:2864

          def printString(s,list):
              i=0
              resultString=str()
              for i in range(len(list)):
                  resultString+=s[list[i]]
                  i=i+1
              print (resultString)
          
          printString('123456789',[1,7,5,3])
          

          【讨论】:

            【解决方案6】:

            导致此结果的函数:

            printString('123456789',[1,7,5,3])
            2
            8
            6
            4
            

            可以通过多种方式实现,这就是我的做法。

            def printString(input, indexArr):
              for i in indexArr:
                print(input[i])
            
            printString('123456789',[1,7,5,3])
            

            Live Demo

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-06-14
              • 2017-08-29
              • 1970-01-01
              • 2017-04-20
              • 1970-01-01
              • 1970-01-01
              • 2012-07-07
              • 2014-11-30
              相关资源
              最近更新 更多