2015-02-12 26 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