Python,避免嵌套for循环

Python,避免嵌套for循环,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据帧,其值为('ABC'或'BCD'),还有另一个字典列表,其格式为[{ID:'ABC',StList:['ABC','BCD','DEF']},{ID:'DEF',StList:['ABC','CCC','DEF']}……] df=['ABC'或'BCD',…] dictList=[{ID:'ABC',StList:['ABC','BCD','DEF']},{ID:'DEF',StList:'ABC','CCC','DEF']}……] 我必须遍历数据帧,检查列中的每个值是否存在于St

我有一个数据帧,其值为('ABC'或'BCD'),还有另一个字典列表,其格式为[{ID:'ABC',StList:['ABC','BCD','DEF']},{ID:'DEF',StList:['ABC','CCC','DEF']}……]

df=['ABC'或'BCD',…]

dictList=[{ID:'ABC',StList:['ABC','BCD','DEF']},{ID:'DEF',StList:'ABC','CCC','DEF']}……]

我必须遍历数据帧,检查列中的每个值是否存在于StList中,如果为true,则返回ID,并将ID附加到另一个列表中

为此,我使用了嵌套循环,它可以工作,但在性能方面并不理想。还有别的办法吗

编辑:我试过的替代方案

Df1=['ABC'、'ABC'或'BCD'、'ZYB'、('ABC'和'CD')或'NMM']

DF2=[{ID:Testing,STList:['ABC','BCD','ZYY','NMM',{ID:Testing2,STList:['ABC'].}]

对于DF1的第一行: 返回的结果应该类似于final_result=['Testing','Testing2'],然后将在DF1中针对第一行进行更新


有没有一种方法可以使用数据帧功能实现这一点?它在某些行中也有布尔逻辑,需要进行评估?

这个问题的答案是:没有


您的查询没有可能的方法阻止嵌套循环来提高性能。为了扫描字典/数组中的每个数据,它需要迭代层以达到索引的峰值节点。您可以使用选择器(列和行)手动查找特定元素/索引,但它不适用于您的场景。

请说得更清楚。您必须检查每个StList?给我们一个您提到的返回ID示例。如果您提供嵌套循环代码,则更容易了解您想要实现的目标,阅读和理解文本比将循环转换为某些d要困难得多ataframe技巧你说的是数据帧,这是否意味着你在使用pandas?在这种情况下,python的解决方案是将pandas API与查询和选择器一起使用。这将删除循环。尽管如此,你提到性能是一个问题,但无论你使用嵌套循环还是单个巧妙的循环,都可能不会改变循环的数量你必须做的读取操作。循环本身并不昂贵,它是你正在做的全部操作的数量。除非你有像数据索引这样的聪明方法,否则你真的只需要读取每个StList的每个元素,看看它是否相等,嵌套逻辑或其他。不管怎样,你的数据结构s嵌套,为了直观起见,最好让代码反映这一事实#将dictList转换为dictionary,那么您的搜索操作将花费O(1)个时间