Python 测试列表以基于约束删除不需要的列表

Python 测试列表以基于约束删除不需要的列表,python,algorithm,list,Python,Algorithm,List,我有一份清单。列表由来自特定区域的人组成,如果列表中有太多来自特定区域的人,我想从列表集中删除该列表。列表的长度为9 list=[[["Aarat","California"], ["Aaron","California"], ["Abba","California"], ["Abaddon","California"], ["Abner","Nevada"], ["Abram","Nevada"], ["Abraham","Nevada"], ["Absalom","Nevada"], ["A

我有一份清单。列表由来自特定区域的人组成,如果列表中有太多来自特定区域的人,我想从列表集中删除该列表。列表的长度为9

list=[[["Aarat","California"],
["Aaron","California"],
["Abba","California"],
["Abaddon","California"],
["Abner","Nevada"],
["Abram","Nevada"],
["Abraham","Nevada"],
["Absalom","Nevada"],
["Adullam","Utah"]],
......,
[["Abital","California"],
["Abitub","California"],
["Absalom","Nevada"],
["Accad","Nevada"],
["Agar","Utah"],
["Agee","Utah"],
["Aijeleth-Shahar","New Mexico"],
["Ain","New Mexico"],
["Amram","Washington"]]]
Cities=["California","Nevada","Utah","New Mexico","Idaho","Washington"]
denk=[] 
for city in Cities:
    den=[]
    for i in list:
        a=i[0]
        b=i[1]
        c=i[2]
        d=i[3]
        e=i[4]
        f=i[5]
        g=i[6]
        h=i[7]
        k=i[8]
        if a==city:
            ab=1
        if b==city:
            ac=1
        if c==city:
            ad=1
        if d==city:
            ae=1
        if e==city:
            af=1
        if f==city:
            ag=1
        if g==city:
            ah=1
        if h==city:
            ai=1
        if k==city:
            aj=1
        if (ab+ac+ad+ae+af+ag+ah+ai+aj)>3:
            den.append(1)
        if (ab+ac+ad+ae+af+ag+ah+ai+aj)<4:
            den.append(0)
    denk.append(sum(den))

finalList=[]
for i, j in enumerate(denk):
    if j == 0:
        finalList.append(list[i])
在测试这个特定的列表时,测试有多少人来自加利福尼亚州将使den=1,因为有3个以上的人来自加利福尼亚州。下一个城市,内华达州,也将使den=1,以此类推。。。。 den=[1,1,0,0,0] 邓克=[2] 所以这张单子被扔掉了

[["Abital","California"],
["Abitub","California"],
["Absalom","Nevada"],
["Accad","Nevada"],
["Agar","Utah"],
["Agee","Utah"],
["Aijeleth-Shahar","New Mexico"],
["Ain","New Mexico"],
["Amram","Washington"]]
在这里执行同样的操作会为城市中的每个城市生成den=0,den=[0,0,0,0,0],denk=[0],因此该列表将被接受


finalList不应该有任何列表包含来自同一地点的太多人。

假设您从以下内容开始:

list=[[["Aarat","California"],
    ["Aaron","California"],
    ["Abba","California"],
    ["Abaddon","California"],
    ["Abner","Nevada"],
    ["Abram","Nevada"],
    ["Abraham","Nevada"],
    ["Absalom","Nevada"],
    ["Adullam","Utah"]],[["Abital","California"],
    ["Abitub","California"],
    ["Absalom","Nevada"],
    ["Accad","Nevada"],
    ["Agar","Utah"],
    ["Agee","Utah"],
    ["Aijeleth-Shahar","New Mexico"],
    ["Ain","New Mexico"],
    ["Amram","Washington"]]]
要查找每个二级列表中的分布,可以使用列表理解和:

要查找每个第二级列表中最常见的计数,可以使用

>>> [collections.Counter(e[1] for e in l).most_common(1)[0][1] for l in list]
[4, 2]
因此,要仅保留最常见计数最多为3的第二级列表,您可以使用

>>> [l for l in list if collections.Counter(e[1] for e in l).most_common(1)[0][1] <= 3]
[[['Abital', 'California'],
  ['Abitub', 'California'],
  ['Absalom', 'Nevada'],
  ['Accad', 'Nevada'],
  ['Agar', 'Utah'],
  ['Agee', 'Utah'],
  ['Aijeleth-Shahar', 'New Mexico'],
  ['Ain', 'New Mexico'],
  ['Amram', 'Washington']]]

>>[l代表列表中的l如果集合。计数器(e[1]代表列表中的e)。最常见的(1)[0][1]最后一个代码返回什么?如果我打印列表,它似乎返回与以前相同的结果。这不会修改
列表
-它会返回一个新列表。如果要修改
列表
,请编写
列表=[l代表列表中的l如果…
>>> [collections.Counter(e[1] for e in l).most_common(1)[0][1] for l in list]
[4, 2]
>>> [l for l in list if collections.Counter(e[1] for e in l).most_common(1)[0][1] <= 3]
[[['Abital', 'California'],
  ['Abitub', 'California'],
  ['Absalom', 'Nevada'],
  ['Accad', 'Nevada'],
  ['Agar', 'Utah'],
  ['Agee', 'Utah'],
  ['Aijeleth-Shahar', 'New Mexico'],
  ['Ain', 'New Mexico'],
  ['Amram', 'Washington']]]