我有一个清单
myList=[1,2,3,4]
我想访问'1'(即myList
的第一个元素)。
myList
是类/类型list
&的实例。有自己的数据名称/属性[1,2,3,4]
所以某种方式我必须能够参考myList
(实例)
>>>EG: myList.__datamemeber__.iteritems()
注意:我知道我可以做到
>>>for i in myList:
修改 好吧,我怀疑是
1)myList
是类/类型list
的实例?
2)如果是的话myList
的“1”,“2”......
修改
好的,所以我试图用DictReader读取CSV
>>>reader = csv.DictReader(ifile)
现在我想知道'读者'是否为空
所以我想如果我能得到一个DictReader&的元素看看它是否为空
我可以获得所有的行
>>>for line in reader:
我想知道'读者'是否为空。如果我得到一个实例(如reader
),我可以得到它的元素。
答案 0 :(得分:2)
列表由整数索引。例如,要获取它的第一个(在Python中,在索引0处)项目:
>> myList[0]
1
您可以使用list的index
方法查找给定值的索引:
>> myList.index(1)
0
您可以使用enumerate
迭代列表以获取索引和项目:
for index, item in enumerate(myList):
print "myList[%s] is %s" % (index, item)
答案 1 :(得分:2)
您似乎在(错误的)假设下操作CSV读者是列表或至少与列表(或更一般地,序列)相似。使用列表,检查空虚很容易 - 通常,将长度与0进行比较;在Python中,成语是集合,如果它们是空的(即if not items: # empty collection
)则是假的。
但是CSV读者不是列表甚至是集合,它们是迭代器。迭代器中是否存在元素是未知的(实际上,无关紧要 - 继续读取),您只能请求下一个元素,如果没有下一个元素,则可以获取该元素或异常。在您要求之前,这些物品甚至可能不存在。迭代器没有长度的概念。
如果你绝对肯定需要特殊的逻辑来处理空文件,那么 是一种(相当丑陋)的方法,虽然它强迫你拥有那个空文件逻辑和处理同一个地方。
try
获取其第一个元素并将其存储在某个位置(例如,first_element
)。except StopIteration:
(即当您收到表示“没有更多元素”的异常时),该文件为空(分别为读者认为其为空)。except
未触发(else
上的try
条款,请参阅documentation),您获得了第一个元素,可以处理它,然后继续处理读者在你的for
循环中产生的所有其他内容。除了上一步中暗示的代码重复之外,只需使循环变为for element in itertools.chain([first_element], reader)
(首先产生first_element
,然后传递每个元素reader
yield)。请注意,这有一些开销(与读者的解析工作和您自己的处理相比可能是可疑的,但是对于记录......)。
答案 2 :(得分:1)
我知道'在读者之后排队。它会是空的。在读取线之前它不会是空的。但是如果ifile是空文件对象,那么读者是空的那么?一个人总是可以使用'for line in reader:'&然后检查行是否为空。但我不想那样。我想知道'reader'在使用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.
答案 3 :(得分:0)
'1','2'等是列表的 items ,而不是属性(那是python术语,我会称之为元素)。如上所述,您通常只需使用
抓住它们mylist[0] # ... or whatever instead of 0
对于其他花哨的东西,您可能会发现 mylist.index 非常方便,甚至来自运营商包的 itemgetter 。取决于你真正想要的东西。