Python:用户输入作为列表索引

时间:2015-02-12 06:24:05

标签: python list tuples

我正在尝试使用用户输入作为列表的索引,但我不断收到错误“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

将对原始列表的子集进行排序。

2 个答案:

答案 0 :(得分:3)

你的(直接)问题就在这一行:

sublist = list[j, k]

据推测,list是项目列表 1 。执行somelist[a, b]时,python会看到等同于somelist[(a, b)]的内容。因此,您可以看到,您正在使用somelisttuple索引slice(这不起作用)。您可能需要sublist = list[j:k] 。在这种情况下,你会做:

j

即使在进行此更改后,您仍然会遇到问题 - 值得注意的是,代码中的kstr类型为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)

这里有一些问题:

  1. 您的函数名为sort,这是内置方法的名称。
  2. 您没有调用此行中的方法sorted = sublist.sort(缺少())。
  3. 您将输入中的每个字母作为函数的参数。
  4. 这:list[j,k]是造成问题的原因,因为j,k是一个元组。
  5. sort正在进行就地操作,因此会返回None,这将是您最终要打印的内容。
  6. 解决这些问题:

    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)