Python - 编写切片功能

时间:2013-11-05 14:30:19

标签: python function python-3.x slice

我正在尝试编写一个函数来切割两个给定值之间的列表。如果停止值超出列表边界,则停止值是列表的长度。如果起始值超过列表边界,我想返回一个空列表。如果起始值小于停止值,我想返回一个空列表。我不想使用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(),但我想不出一种可以用于此功能的方法。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您只需要使用切片表示法。这篇文章中包含了这个内容:

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))

答案 1 :(得分:0)

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

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