【问题标题】:Python - Writing slice functionPython - 编写切片函数
【发布时间】:2013-11-16 11:10:47
【问题描述】:

我正在尝试编写一个在两个给定值之间分割列表的函数。如果停止值超出列表边界,则停止值是列表的长度。如果起始值超出列表范围,我想返回一个空列表。如果起始值小于终止值,我想返回一个空列表。我不想使用除range()list.append() 之外的任何内置函数或方法

调用函数的代码是:

str_list = ['s', 'h', 'r', 'u', 'g', 'g', 'e', 'd']

print("\nget_slice Test")
my_slice = list_function.get_slice(str_list, 2, 100)
print(list_function.to_string(str_list))
print(list_function.to_string(my_slice))

my_slice = list_function.get_slice(str_list, 6, 1)
print(list_function.to_string(my_slice))

my_slice = list_function.get_slice(str_list, 2, 5)
print(list_function.to_string(str_list))
print(list_function.to_string(my_slice))

我想要产生的输出是:

get_slice Test
List is: s, h, r, u, g, g, e, d
List is: r, u, g, g, e, d
List is:
List is: s, h, r, u, g, g, e, d
List is: r, u, g

我将函数定义为:

def get_slice(my_list, start, stop):

我已经尝试过my_list = my_list[start:stop],但我得到一个“NoneType”对象不可迭代错误。我也想尝试使用for k in range(0, length(my_list)):,因为有人建议我使用range(),但是我暂时想不出可以用于此功能的方法。

我们将不胜感激。

【问题讨论】:

  • 提示:看range(start, stop)....
  • 当 Python 已经支持切片表示法时,你为什么要这样做?是作业吗?学习?你都尝试了些什么?显示一些代码。
  • 请展示你的尝试!另外,请显示您的预期输入。
  • 我试过my_list = my_list[start:stop] 但我得到一个“NoneType”对象不是可迭代的错误。我也想尝试使用for k in range(0, length(my_list)):,因为有人建议我使用range(),但是我暂时想不出可以用于此功能的方法。
  • 编辑您的问题以包含您的尝试,这样会更清楚。

标签: python function python-3.x slice


【解决方案1】:

您只需要使用切片表示法。这在此线程中已涵盖:

Explain Python's slice notation

这是打印正确输出的解决方案:

def get_slice(my_list, start, stop):
        return my_list[start:stop][:]

def to_string(my_list):
        return 'List is: %s' % ''.join(my_list[:])

str_list = ['s', 'h', 'r', 'u', 'g', 'g', 'e', 'd']

print("\nget_slice Test")
my_slice = get_slice(str_list, 2, 100)
print(to_string(str_list))
print(to_string(my_slice))

my_slice = get_slice(str_list, 6, 1)
print(to_string(my_slice))

my_slice = get_slice(str_list, 2, 5)
print(to_string(str_list))
print(to_string(my_slice))

【讨论】:

    【解决方案2】:

    我无法重现您的问题,您应该发布完整的代码。也许缺少回报​​并修复了变量?我不知道。但这是我的解决方案:

    def get_slice(my_list, start, stop):
        return my_list[start:stop]
    
    def to_string(my_list):
        return "List is: " + ', '.join(my_list)
    
    str_list = ['s', 'h', 'r', 'u', 'g', 'g', 'e', 'd']
    
    print("\nget_slice Test")
    my_slice = get_slice(str_list, 2, 100)
    print(to_string(str_list))
    print(to_string(my_slice))
    
    my_slice = get_slice(str_list, 6, 1)
    print(to_string(my_slice))
    
    my_slice = get_slice(str_list, 2, 5)
    print(to_string(str_list))
    print(to_string(my_slice))
    

    输出:

    get_slice Test
    List is: s, h, r, u, g, g, e, d
    List is: r, u, g, g, e, d
    List is: 
    List is: s, h, r, u, g, g, e, d
    List is: r, u, g
    

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 2016-09-04
      • 2020-09-27
      • 2019-11-23
      • 2022-07-11
      • 1970-01-01
      • 2017-07-09
      • 2012-11-22
      • 2021-11-26
      相关资源
      最近更新 更多