我对编程非常陌生,尤其是Python,所以谢谢你忍受我的无知。当使用一个创建可迭代对象的函数时,比如csv.DictReader()或enumerate(),我似乎无法在没有for循环的情况下索引到该对象的各个部分。一个for循环可以很容易地将对象分解成单个的列表式组件,甚至可以将这些组件分解成更小的列表式组件,但是我自己不知道如何获得这些项目。我知道我可以使用for循环并将迭代的每一部分保存在新的变量中,但似乎我错过了一条更直接的路线。循环使用什么语法来索引这些对象?
例如,我试过使用“reader = csv.DictReader(file.csv)",只是“print(reader)”(它只给出对象在内存中的位置),或者访问“reader[0]”(得到一个错误,'reader'不是可订阅的)。如果它不是可订阅的,那么for循环是如何将它分开的?正在为reader中的行创建循环“”:print(line)”给出了我正在寻找的数据。我甚至可以使用“for piece in line”来进一步分解'line':print(piece)”那么'line'和'piece'到底是什么?它们似乎分别不是“reader[0]”或“line[0]”。我怎样才能在不使用for循环的情况下索引这些数据呢?
顺便说一句,我在尝试访问字典对象时遇到了相同类型的问题,而不使用键的名称。如果我根据用户提供的文件创建一个新的字典,其中的键名是可变的,那么我就不能提前给予程序键名;但是,同样地,我找不到一种方法来按顺序索引字典,没有这些名字。然而,for循环在这方面没有问题。我无法想象它只是提前“知道”字典键的确切名称,那么它使用什么语法来按顺序索引它们呢?
谢谢你的帮助我在这里只发现了一些其他的问题,这些问题似乎与我所问的问题有关,但它们似乎是在问其他的、特定的语言,或者是在提示一些更高层次的讨论,涉及一些我无法理解的模糊模块和函数。
1条答案
按热度按时间a1o7rhls1#
就个人而言,当一个函数返回一个迭代器时,如果我想访问由迭代器生成的索引项(随机访问),如果条目的数量不是很大,我会将迭代器返回的条目转换为列表。这里有一个字典的例子。