python for循环是否调用__len__?

下面是相关代码

class f_Data(Dataset):
    def __init__(self, csv):
        self.csv = pd.read_csv(csv)

    def __len__(self):
        return self.csv.shape[0]

    def __getitem__(self, idx):
        path = "data/"+self.csv.loc[idx,"File"]
        img = io.imread(path)
        tensorToRet = torch.from_numpy(img)
        label = self.csv.loc[idx,"daysToOvulation"]

        return tensorToRet, label

data = f_data("path/toCSV")

for x,y in data:
    print(x.shape, y)

问题是在通过最后一个元素后,循环继续迭代。我试着在 函数,但看起来for循环根本没有调用len。我可以把它改成 for i in range(data):但这看起来不像pythonic。

为什么循环不调用 而它又是怎么做的呢?

解决方案:

你可以使用 loc() 来迭代。同时, __len_ 是len()函数调用的内置函数。


data = {'Name': ['A', 'B', 'C', 'D'], 
        'Age': [1, 2, 3, 4], 
        } 
# This is dummy data equivalent to what is read by csv

df = pd.DataFrame(data, columns = ['Name', 'Age']) 

for i in range(len(df)) : 
  print(df.loc[i, "Name"], df.loc[i, "Age"]) 

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何通过http.client.HTTPSConnection设置SNI。

2022-9-7 22:00:21

未分类

Ionic 5键盘的问题

2022-9-7 22:11:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索