【问题标题】:Saving the distance between a character and every other character in a string保存字符串中一个字符与每个其他字符之间的距离
【发布时间】:2020-01-05 14:47:51
【问题描述】:

我有一个字符串 x,我想保存中间的一个随机字符(我将称之为 'z')与 x 中的每个其他字符之间的距离/方向以及该字符的类型距离/方向指向另一个字符串。如何循环遍历所有其他字符(从左到右,将 z​​ 排除在外)以将数据保存在不同的字符串中而不会出错?这是一个例子:

x = "vnu4)rhg&3j"

#if the process would be done with the 'h' in x, this other string-variable 'q'
#should be the result:

q = "-6='v',-5='n',-4='u',-3='4',-2=')',-1='r',+1='g',+2='&',+3='3',+4='j'"

我使用 Python 3.7.4

【问题讨论】:

  • 到目前为止您尝试了什么,您的方法在哪里遇到问题?请在原始问题中包含此信息

标签: python python-3.x string iteration


【解决方案1】:

这只是数学运算,从实际位置中减去“h”在x 中的位置,可以通过enumerate 在列表上迭代时确定:

x = "vnu4)rhg&3j"
qList = ["%s='%s'" % (i-x.find('h'), x[i]) for (i, j) in enumerate(x)]
print(qList)  # as list
print(','.join(qList))  # as string

输出:

["-6='v'", "-5='n'", "-4='u'", "-3='4'", "-2=')'", "-1='r'", "0='h'", "1='g'", "2='&'", "3='3'", "4='j'"]
-6='v',-5='n',-4='u',-3='4',-2=')',-1='r',0='h',1='g',2='&',3='3',4='j'

【讨论】:

    【解决方案2】:
    def save_distance(target_string, target_char):
        index_of_target_char = target_string.find(target_char)
        output_string = ""
        for i, char in enumerate(target_string):
            if i == index_of_target_char:
                continue
            else:
                distance = i - index_of_target_char
                if distance > 0:
                    output_string = output_string + "+" + str(distance) + "=" + f"'{char}'" + ("," if i < len(target_string) - 1 else "")
                else:
                    output_string = output_string + str(distance) + "=" + f"'{char}'" + ("," if i < len(target_string) - 1 else "")
        return output_string
    

    输出:

    "-6='v',-5='n',-4='u',-3='4',-2=')',-1='r',+1='g',+2='&',+3='3',+4='j'"
    

    请注意,如果目标字符串中多次出现目标字符,此解决方案将无法正常工作。我不确定这对您面临的问题是否重要。

    【讨论】:

      【解决方案3】:

      这应该足以让您入门:

      x = "vnu4)rhg&3j"
      
      h_ind = x.find('h')
      for i in range(len(x)):
          print(f"{x[i]} = {i - h_ind}")
      

      x.find(h) 正在获取字符串中“h”的索引,然后从其他字符的索引中删除。

      输出:

      v = -6
      n = -5
      u = -4
      4 = -3
      ) = -2
      r = -1
      h = 0
      g = 1
      & = 2
      3 = 3
      j = 4
      

      现在适用于:

      x = "vvnu4)rhg&3j"
      

      输出:

      v = -7
      v = -6
      n = -5
      u = -4
      4 = -3
      ) = -2
      r = -1
      h = 0
      g = 1
      & = 2
      3 = 3
      j = 4
      

      【讨论】:

      • 你的输出应该是v=-6 v=-6...,但它应该是v=-7 v=-6...
      • @BSQL: find 总是出现在第一个位置,如果有重复的字符,find 总是出现在第一个位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多