【问题标题】:Trouble slicing based on function +1基于函数+1的麻烦切片
【发布时间】:2021-02-26 19:20:02
【问题描述】:

我正在尝试在c_item_number_one = (r'12" Pipe SA-106 GR. B SCH 40 WALL smls'.upper()) 中搜索" 以获取它和它前面的所有信息。即我想要12"

我以为我可以搜索" 所在的位置...

def find_nps_via_comma_item_one():
    nps = '"'
    print(c_item_number_one.find(nps))
find_nps_via_comma_item_one()

Image showing above function results in 2 然后在它之后切掉所有东西

c_item_number_one = (r'12" Pipe SA-106 GR. B SCH 40 WALL smls'.upper())

def find_nps_via_comma_item_one():
    nps = '"'
    print(c_item_number_one.find(nps))
find_nps_via_comma_item_one()

item_one_nps = slice(3)
print(c_item_number_one[item_one_nps])

问题:返回错误

print(c_item_number_one[item_one_nps])

TypeError: slice indices must be integers or None or have an __index__ method

如何将函数的结果转换为整数?我尝试将print(c_item_number_one.find(nps)) 更改为return(c_item_number_one.find(nps)),但随后它完全停止给出值。

最后,切片部分不会产生我正在寻找的完整答案12"。即使我输入了函数2产生的值

item_one_nps = slice(2)
print(c_item_number_one[item_one_nps])

它只给我12。我需要+1函数结果。

【问题讨论】:

  • 你的find_nps_via_comma_item_one 没有返回任何东西,所以你得到了None
  • @MarkRansom 它在 JupyterLab 中返回 2。我在上面添加了一个片段链接来显示结果。
  • 打印东西与返回东西一样。您的函数中没有 return 语句。
  • @MarkRansom 感谢您的建议。第二条评论最终让我意识到我最初是在正确的轨道上,但在切片时忘记添加我的()

标签: python find slicers


【解决方案1】:

你可以的

sep_char = "\"" 
c_item_number_one.split(sep_char)[0] + sep_char

【讨论】:

  • 这是一种更直接的方法。我最初使用的是 split 方法,但从未想过以这种方式解决它....
【解决方案2】:

print 语句将一个值打印到控制台,而 return 返回一个调用函数的值。

在您的代码中,您没有存储值,而是将其打印到控制台,即使您使用 return 而不是 print,您也没有使用返回的值。

1 被添加到切片中,因为在切片时 python 排除了停止索引,因此要包含您添加的停止索引1

c_item_number_one = (r'12" Pipe SA-106 GR. B SCH 40 WALL smls'.upper())

def find_nps_via_comma_item_one():
    nps = '"'
    return(c_item_number_one.find(nps))

item_one_nps = slice(find_nps_via_comma_item_one()+1)
print(c_item_number_one[item_one_nps])

下面的代码比较冗长。

c_item_number_one = (r'12" Pipe SA-106 GR. B SCH 40 WALL smls'.upper())

def find_nps_via_comma_item_one():
    nps = '"'
    return(c_item_number_one.find(nps))

index = find_nps_via_comma_item_one()

item_one_nps = slice(index+1)
print(c_item_number_one[item_one_nps])

【讨论】:

  • 谢谢雪人斯塔克!我找到了一个稍微不同的解决方案。我的主要问题是我忘记在slice(find_nps_via_comma_item_one()) 的函数中包含我的()def find_nps_via_comma_item_one(): nps = '"' return((c_item_number_one.find(nps))+1) find_nps_via_comma_item_one() item_one_nps = slice(find_nps_via_comma_item_one()) print(c_item_number_one[item_one_nps])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多