元素与其列表的关系是什么

时间:2011-07-27 12:47:55

标签: python

我有一个清单

myList=[1,2,3,4]

我想访问'1'(即myList的第一个元素)。

myList是类/类型list&的实例。有自己的数据名称/属性[1,2,3,4]

所以某种方式我必须能够参考myList(实例)

来访问'1'
>>>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),我可以得到它的元素。

4 个答案:

答案 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读者不是列表甚至是集合,它们是迭代器。迭代器中是否存在元素是未知的(实际上,无关紧要 - 继续读取),您只能请求下一个元素,如果没有下一个元素,则可以获取该元素或异常。在您要求之前,这些物品甚至可能不存在。迭代器没有长度的概念。

如果你绝对肯定需要特殊的逻辑来处理空文件,那么 是一种(相当丑陋)的方法,虽然它强迫你拥有那个空文件逻辑和处理同一个地方。

  1. 让读者
  2. try获取其第一个元素并将其存储在某个位置(例如,first_element)。
  3. except StopIteration:(即当您收到表示“没有更多元素”的异常时),该文件为空(分别为读者认为其为空)。
  4. 如果except未触发(else上的try条款,请参阅documentation),您获得了第一个元素,可以处理它,然后继续处理读者在你的for循环中产生的所有其他内容。
  5. 除了上一步中暗示的代码重复之外,只需使循环变为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 。取决于你真正想要的东西。