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"]) 

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/674.html

(0)
上一篇 2022年6月29日 下午3:59
下一篇 2022年6月29日 下午3:59

相关推荐

发表评论

登录后才能评论