【问题标题】:Python: How to move the position of an output variable using the split() methodPython:如何使用 split() 方法移动输出变量的位置
【发布时间】:2019-03-30 08:28:37
【问题描述】:

这是我的第一个 SO 帖子,所以放轻松!我有一个脚本,用于计算子字符串 ff 的名为 postIdent 的字符串中有多少匹配项。基于此,它然后迭代 postIdent 并提取它后面的所有数据,如下所示:

substring = 'ff'
global occurences
occurences = postIdent.count(substring)

x = 0
    while x <= occurences:
        for i in postIdent.split("ff"):
            rawData = i
            required_Id = rawData[-8:]
            x += 1

为了进一步解释,如果我们采用字符串“090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff”,很明显有 3 个实例ff。我需要在子字符串 ff 的每个实例中获取前面的 8 个字符,因此对于第一个实例,这将是 909a9090。 使用 rawData,当我从 split() 方法中获取数据时,我基本上需要将变量 required_Id 偏移 -1,因为我目前正在获取最后 8 个当前字符串的字符,而不是我刚刚拆分的字符串。另一种方法是将当前的 required_Id 传递给下一次迭代,但我无法做到这一点。

split 方法获取匹配字符串ff之后 之后的所有内容。 使用分区方法可以获得我需要的数据,但不允许我以相同的方式迭代字符串。

【问题讨论】:

  • 欢迎来到 SO,顺便说一句,干得好,提供我们回答您问题所需的所有信息!
  • 非常感谢丹!我知道有些社区可能对新手非常光顾,很高兴以这种方式受到欢迎。

标签: python string python-2.7 split partition


【解决方案1】:

使用列表理解中的切片操作获取每个拆分的最后 8 位:

s = "090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff"

print([x[-8:] for x in s.split('ff') if x])
# ['909a9090', '90434390', 'sdfs9000']

【讨论】:

  • 也可以if len(x) &gt;=8,具体取决于要求。
  • 不应该,尝试python3 -c "[print('abc'[-8:end]) for end in range(0,3)]" 以获取越界索引。列表理解中的print() 需要是一个函数,因此需要 python 3+。
  • 感谢 Austin、pault 和 Dan Farrell。这行得通,但是我正在将变量“required_Id”写入HTML,因此按原样传递“required_Id”会返回“required_Id”的每个变量实例的列表,而不是顺序地每个变量。我将如何一次写一个列表中的每个项目?
  • 最好把它变成一个新问题@AWSnell - 我们可能不得不看示例代码。
【解决方案2】:

不是一个难题,但对于初学者来说很棘手。

如果您在'ff' 上拆分字符串,那么您似乎希望每个子字符串的末尾都有八个字符,但最后一个字符除外。字符串s的最后8个字符可以使用s[-8:]获取。序列x 除了最后一个元素之外的所有元素都可以类似地使用表达式x[:-1] 获得。

将两者放在一起,我们得到

subject = '090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff'
for x in subject.split('ff')[:-1]:
    print(x[-8:])

这应该打印出来

909a9090
90434390
sdfs9000

【讨论】:

  • 感谢霍顿的回复。我已经以不同的方式这样做了,这给了我与以前相同的结果。不过感谢您的帮助,不胜感激。
【解决方案3】:

我不会自己拆分,我会使用str.find。这段代码并不花哨,但很容易理解:

fullstr = "090fd0909a9090ff90493090434390ff90904210412419ghfsdfs9000ff"
search = "ff"
found = None # our next offset of
last = 0
l = 8
print(fullstr)
while True:
    found = fullstr.find(search, last)
    if found == -1:
      break
    preceeding = fullstr[found-l:found]
    print("At position {} found preceeding characters '{}' ".format(found,preceeding))
    last = found + len(search)

总的来说,我更喜欢奥斯汀的回答;它更加优雅。

【讨论】:

  • 非常感谢您的意见。阅读您的绝对更容易,所以感谢您的详细说明,绝对可以帮助我学习!
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多