2013-10-16 134 views
-1
import re 
from collections import Counter 

words = re.findall('\w+', open('/Users/Jack/Desktop/testytext').read().lower()) 

listy = Counter(words).most_common() 


theNewList = list(listy) 


theNewList[1][1] = 10 

#****ERROR HERE**** 
#Traceback (most recent call last): 
# File "countTheWords.py", line 16, in <module> 
# theNewList[1][1] = 10 
#TypeError: 'tuple' object does not support item assignment 

在我看來,list()調用應該將'listy'轉換爲列表。任何想法我做錯了什麼?將元組轉換爲列表

+0

和「listy的價值'究竟是什麼?我們應該猜測它嗎? –

回答

1

.most_common()返回元組列表。當你做list(listy)時,你實際上什麼都不會改變。它不會將元組內部的元組更改爲列表。

由於元組是不可變的,他們不會讓你改變項目(與可變的列表相比)。

但是,您可以將其更改爲列表,通過使用map()

map(list, listy) 
+0

謝謝!正是我在找什麼。 – jackchammons

+0

@jackchammons沒問題:) – TerryA

0

theNewList[1]是一個有效的列表item-access,它返回一個元組。因此theNewList[1][1] = 10是嘗試分配給元組項目。這是無效的,因爲元組是不可變的。

爲什麼你要分配一個新的計數嗎?

2

listy一個list

>>> type(listy) 
<type 'list'> 

其元素並不:

>>> type(listy[1]) 
<type 'tuple'> 

一個第二你要修改其內容之一:

>>> type(listy[1][1]) 
<type 'int'> 

您可以將元素轉換,像這樣:

>>> listier = [list(e) for e in listy] 
>>> type(listier) 
<type 'list'> 
>>> type(listier[1]) 
<type 'list'> 
>>> type(listier[1][1]) 
<type 'int'> 

,然後分配:

>>> listier[1][1] = 10 
>>> listier[1][1] 
10 
+0

'listiest'在哪裏? :) – roippi

+1

@roippi:我保留的時候'類型(listier [1] [1])==列表'! – Johnsyweb