2015-02-12 27 views
0

我想使用用户输入作为列表的索引,但我不断收到错误“TypeError:列表索引必须是整数,而不是元组。以下是我有:Python:用户输入作为列表索引

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

首先'排序= sublist.sort'这是不正确。它应该是'sublist.sort()返回子列表'。 – Marcin 2015-02-12 06:28:43

回答

3

你(即时)的问题是在这条线:

sublist = list[j, k] 

想必list是项目的列表。当你做somelist[a, b]时,Python会看到相当于somelist[(a, b)]的东西。所以,你可以看到,你的索引somelisttuple(这是行不通的)。有机会,你想要一个slice。在这种情况下,你会做:

sublist = list[j:k] 

然而,即使进行此更改后,您仍然有问题 - 值得注意的是,在你的代码jkstr类型,并列出要被索引/切成整数(或None ...)。所以,现在我们有:

sublist = list[int(j):int(k)] 

在这一点上,你可能会不再看到错误,但你不会看到你想这给我们带来了下一个问题的结果。

sorted = sublist.sort 

这里你只是给一个名字分配一个绑定方法。你实际上没有分类任何东西。如果要排序的子列表(到位),你会怎么做:

sublist.sort() 
print(sublist) 

如果您没有问题整理出来的地方,你可以使用内置的sorted功能(前提是你还没有命名的东西否则sorted ;-)

print(sorted(sublist)) 

注意,它被普遍接受的命名变量同样的事情作为一个内置式可导致难以:-)阅读和调试代码。
虽然我们在这,我可能会提到有一种更好的方式来块了你的字符串 - 您可以.split它。例如operation.split()将给你['SORT', '5', '7'],而不需要对输入字符串的输入和索引做出假设。

+0

错过了一些其他的东西:) – 2015-02-12 06:33:31

+0

@BurhanKhalid - 是的,我试图解决一次一个问题(按顺序),所以OP会看到各种错误,因为他们弹出... – mgilson 2015-02-12 06:37:48

+0

您的答案的格式是真棒! – 2015-02-12 06:42:35

2

你这里有几个问题:

  1. 你的函数被调用sort,这是一个内置的方法的名称。
  2. 您不在此行中调用该方法sorted = sublist.sort(其缺失())。
  3. 您正在将来自输入的每个字母作为参数提供给您的函数。
  4. 这个:list[j,k]是什么导致你的问题,因为j,k是一个元组。
  5. 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) 
+0

关于(1),虽然'sort'肯定是一种内置方法的名称......如果它隐藏了_built-in函数的名称,那么它的方式就不会有问题。 – Eithos 2015-02-12 06:38:30

+1

请注意,你仍然有'j','k'为串的问题:-) – mgilson 2015-02-12 06:38:32