2011-07-27 53 views
-2

我有一個列表什麼是元素的reationship其名單

myList=[1,2,3,4] 

我想訪問「1」(即中myList第一個元素)。

myList是類/類型的實例list &有它自己的數據成員/屬性[1,2,3,4]

所以一些方法,我必須能夠與參考訪問「1」到myList(實例)

>>>EG: myList.__datamemeber__.iteritems() 

注:我知道我可以做

>>>for i in myList: 

編輯 好了我的疑問是

1)myList類/類型list的實例?

2)if if什麼是'1','2'...的myList

編輯

好了,所以我試圖用DictReader

讀取CSV
>>>reader = csv.DictReader(ifile) 

現在我想知道如果「讀者」爲空

,所以我想,如果我能得到DictReader的一個元素&看看它是否爲空

我可以得到所有行

>>>for line in reader: 

我想知道,如果「讀者」是empty.Also如果我得到一個實例(如reader)我可以得到它的元素。

+8

'myList [0]'不起作用? '我在myList'完全有效。你有什麼問題?你不能做什麼?你有沒有工作或得到錯誤的代碼?你遇到了什麼錯誤? –

+0

爲什麼被標記爲[metaclasses]? – geoffspear

+1

當你輸入(myList)時,你看到了什麼? –

回答

2

你似乎下的(錯誤的)假設以操作CSV讀者名單或至少有點像列表(或者更一般地說,序列)。使用列表,檢查空虛是很容易的 - 通常,比較長度爲0;在Python中,成語對於集合來說是空的(即if not items: # empty collection)。

但CSV閱讀器不是列表甚至集合,它們都是迭代器。無論是否存在迭代器中的元素都是未知的(實際上,這並不重要 - 讀取),只能請求下一個元素,如果沒有下一個元素,則可以獲取該元素或異常。這些項目可能甚至不存在,直到你問他們。迭代器沒有長度的概念。

如果你絕對肯定需要特殊的邏輯來處理空文件,有一個(相當醜陋的)的方式來做到這一點,但它迫使你在同一個地方,空文件邏輯和處理。

  1. 讓讀者
  2. try得到它的第一個元素,並存儲在某個地方(比如說,first_element)。
  3. except StopIteration:(即,當您得到指示「沒有更多元素」的異常時),該文件是空的(分別地,讀者認爲它是空的)。
  4. 如果except沒有觸發(這是在try一個else條款,見documentation),你得到的第一個元素,可以處理它,然後繼續處理一切在你不經意for循環讀者產量。

可選地在最後步驟所隱含的代碼重複,只是使環路去for element in itertools.chain([first_element], reader)(其第一收率first_element,然後通過每個元件reader產量上)。請注意,這有一些開銷,雖然(可能相比讀者的分析工作和你自己的處理,但記錄...)。

+0

我還沒有嘗試過,但這正是我正在尋找的解釋。謝謝。「要正確地溝通你的問題並正確理解它需要技巧。 – Jibin

2

列表由整數索引。例如,要得到它的第一個(在Python中,在指數0):

>> myList[0] 
1 

你可以用列表的index方法查找給定值的索引:

>> myList.index(1) 
0 

,你可以迭代列表以及enumerate獲得兩個指標和項目:

for index, item in enumerate(myList): 
    print "myList[%s] is %s" % (index, item) 
0

「1」,「2」等,都是項列表的,作爲oppos編輯到屬性(這是蟒蛇行話,我會叫他們元素)。正如上面所指出的,你通常只是抓住他們與

mylist[0]  # ... or whatever instead of 0 

對於其他花哨的東西,你可能會發現mylist.index是得心應手,甚至itemgetter從運營商包。取決於你真正想要的東西。

+0

我不認爲Python主張調用列表元素:項目。你有沒有關於這一點的參考?對於一個列表,我使用術語'元素'。對於我來說,'item'具有更普遍的意義,我會把所有的東西都稱爲一個集合,一個列表,一組屬性或其他任何東西中的幾個'東西'之一。這是我的感覺。 – eyquem

1

我知道'之後在讀者線。它將是空的。如果ifile是空文件object.so將讀取器爲空然後呢?可以使用'for line in reader:'&然後檢查線是否爲空。但是我不知道「不想that.I想知道‘讀者’爲空剛過其使用csv.DictReader()創建

haverows = False 
reader = csv.DictReader(ifile) 
# reader may or may not have rows 
for row in reader: 
    haverows = True 
    # reader definately had a row. here it is 
    print row 

if not haverows: 
    # reader never had any rows. oh well. 
print 'done!' 
# reader is now exhausted of all its rows. 
+0

我不想使用'for loop' – Jibin

+0

@jibin。嗯..這似乎是任意的。你爲什麼打開文件? – SingleNegationElimination