我正在尝试使用用户输入作为列表的索引,但我不断收到错误“TypeError:list indices必须是整数,而不是元组。”这就是我所拥有的:
def sort(j, k):
sublist = list[j, k]
print sublist
sorted = sublist.sort
print sorted
operation = raw_input()
sort(operation[5], operation[7])
用户应该输入
SORT 3 5
将对原始列表的子集进行排序。
答案 0 :(得分:3)
你的(直接)问题就在这一行:
sublist = list[j, k]
据推测,list
是项目列表 1 。执行somelist[a, b]
时,python会看到等同于somelist[(a, b)]
的内容。因此,您可以看到,您正在使用somelist
(tuple
索引slice
(这不起作用)。您可能需要sublist = list[j:k]
。在这种情况下,你会做:
j
即使在进行此更改后,您仍然会遇到问题 - 值得注意的是,代码中的k
和str
类型为None
,并且列表需要编入索引/切片用整数(或sublist = list[int(j):int(k)]
...) 2 。所以,现在我们有:
sorted = sublist.sort
此时,你可能会停止看到错误,但是你不会看到你想要的结果,这会把我们带到下一个问题。
sublist.sort()
print(sublist)
这里只是为名称分配绑定方法。你实际上并没有对任何东西进行排序如果要对子列表进行排序(就地),您可以:
sorted
如果您可以将其排除在原位之外,则可以使用内置sorted
功能(前提是您没有将其他内容命名为print(sorted(sublist))
; - )
.split
1 注意,通常认为将变量命名为与内置类型相同的东西会导致难以读取和调试代码: - )。
2 虽然我们正在讨论它,但我可能会提到有更好的方法来填充你的字符串 - 你可以operation.split()
它。例如['SORT', '5', '7']
将为您提供{{1}},而不是需要对输入进行假设并为输入字符串编制索引。功能
答案 1 :(得分:2)
这里有一些问题:
sort
,这是内置方法的名称。sorted = sublist.sort
(缺少())。list[j,k]
是造成问题的原因,因为j,k
是一个元组。sort
正在进行就地操作,因此会返回None
,这将是您最终要打印的内容。解决这些问题:
def my_sorter(j, k): # Changed method name
sublist = my_list[int(j):int(k)] # You need j:k
sublist.sort() # Note, no return value, because its in-place
print sublist
user_input = raw_input('Please enter the indices: ')
j,k = user_input.split()
my_sorter(j,k)