Python 3.x 如何在python中迭代完整列表?For循环在第一个实例停止

Python 3.x 如何在python中迭代完整列表?For循环在第一个实例停止,python-3.x,list,indexing,Python 3.x,List,Indexing,我一直在尝试让for循环迭代名为pdg_vals的列表的全部值。我想得到14的所有值的索引号。然后我想使用这些索引值创建一个新列表 Python不断返回约定的第一个实例。也就是说,它显示我要添加的新列表(pdg_ent)仅填充了第一个实例的索引值,其中pdg_vals的值为14 我尝试使用+=操作追加 代码如下: myfile = ROOT.TFile("/home/hilary/root/compile/Research/GENIE_atm.root") mydir = myfile.GENI

我一直在尝试让for循环迭代名为pdg_vals的列表的全部值。我想得到14的所有值的索引号。然后我想使用这些索引值创建一个新列表

Python不断返回约定的第一个实例。也就是说,它显示我要添加的新列表(pdg_ent)仅填充了第一个实例的索引值,其中pdg_vals的值为14

我尝试使用+=操作追加

代码如下:

myfile = ROOT.TFile("/home/hilary/root/compile/Research/GENIE_atm.root")
mydir = myfile.GENIE
mytree = mydir.Get("Event")
pdg_vals = [] #an empyt list to fill pdg values
for e in mytree:
    for v in e.mc_pdg:
        pdg_vals += [v] #fill empty list with mc_pdg values
#pdg_vals
pdg_ent = []

for x in pdg_vals:
    if x == 14:
        pdg_ent += [pdg_vals.index(x)]

pdg_ent
以下是pdg_VAL列表的外观:

[12,
 1000180400,
 2112,
 1000180390,
 11,
 2212,
 2212,
 2000000002,
 2000000101,
 14,
 1000180400,
 2212,
 1000170390,
 14,
 2214,
 2212,
 111,
 2212,
 111,
 2212,
 2000000002,
 12,
 ...]
显然,如果我正确地编写代码,我的新pdg元素列表中的第一个值应该是9,第二个值应该是13,以此类推

这是pdg的输出

[9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 9,
 ...]
为什么python只在新列表中添加旧列表中值14的第一个实例?

index函数不是您想要的 pdg_vals.index(x)将如前所述,“在第一个项的列表中返回值等于x的从零开始的索引”-在您的情况下,每当x为14时,该索引为9。因此,如果您不希望返回第一个值,那么这不是您需要的

列举 枚举函数()似乎就是您所需要的:

for index, value in enumerate(list):
  if value == 14:
     print(index)
“index”函数不是您想要的 pdg_vals.index(x)将如前所述,“在第一个项的列表中返回值等于x的从零开始的索引”-在您的情况下,每当x为14时,该索引为9。因此,如果您不希望返回第一个值,那么这不是您需要的

列举 枚举函数()似乎就是您所需要的:

for index, value in enumerate(list):
  if value == 14:
     print(index)
这将适用于您的特定场景。但是,如果您需要按升序排序,则使用二进制搜索时,搜索速度会快得多

这将适用于您的特定场景。但是,如果您需要按升序排序,则使用二进制搜索时,搜索速度会快得多