Python:根据子列表项

时间:2018-03-18 03:30:08

标签: python list

我正在尝试为以下函数编写python 3代码:

我有一个名为Config的列表,

Config = [[32, 31, 33, 34], [32, 42, 13, 33], [32, 42, 34, 44], [42, 42, 43, 44]]

此列表有4个子列表。

现在我想从Config中获取一个新列表,如下所示(没有第一个和第四个子列表),

ConfigRevised = [[32, 42, 13, 33], [32, 42, 34, 44]]

因为可以从每个子列表中观察到:

  1. [32,31,33,34]:列表中每个项目的第一个字符是相同的[3,3, 3,3]。
  2. [32,42,13,33]:列表中每个项目的第一个字符不相同 [3,2,1,3]。
  3. [32,42,34,44]:列表中每个项目的第一个字符不相同 [3,4,3,4]。
  4. [42,42,43,44]:列表中每个项目的第一个字符是相同的[4,4, 4,4]。
  5. 现在,我想删除子列表1和子列表4,因为子列表项的第一个字符是相同的。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

Config = [[32, 31, 33, 34], [32, 42, 13, 33], [32, 42, 34, 44], [42, 42, 43, 44]]
new_results = [i for i in Config if len({str(b)[0] for b in i}) > 1]

输出:

[[32, 42, 13, 33], [32, 42, 34, 44]]

答案 1 :(得分:0)

如果你想从旧的创建一个新的:

Config = [[32, 31, 33, 34], [32, 42, 13, 33], [32, 42, 34, 44], [42, 42, 43, 44],[11,22,33,44]]

checker=[]
for j,i in enumerate(Config):
    check_data=[list(str(j))[0] for j in i]
    datar=[check_data for m in check_data if check_data.count(m)>2]
    if not datar:
        checker.append(i)
print(checker)

如果你想删除,那么你可以尝试:

Config = [[32, 31, 33, 34], [32, 42, 13, 33], [32, 42, 34, 44], [42, 42, 43, 44],[11,22,33,44]]

checker={}
for j,i in enumerate(Config):
    check_data=[list(str(j))[0] for j in i]
    datar=[check_data for m in check_data if check_data.count(m)>2]
    if datar:

        checker[j]=1
    else:
        checker[j]=0

for value,del_value in checker.items():
    if del_value==1:
        del Config[value]
print(Config)

输出:

[[32, 42, 13, 33], [32, 42, 34, 44], [42, 42, 43, 44]]