嵌套列表查询的通配符

时间:2014-03-26 14:10:00

标签: python list nested wildcard

我有一个嵌套列表,我想检查i是否包含在我的列表的最低级别(i是两个元素中的第一个"子列表"。)

1)有直接的方法吗?

2)我尝试了以下方法:

for i in randomlist:
    if [i,randomlist.count(i)] in list1:

有没有办法用通配符替换randomlist.count(i)?我试过了*,%,...,,但其中没有一个效果很好。有任何想法吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你想要的是:

if any(l[0] == i for l in list1):

这将检查每个子列表中的第一项,这实际上与拥有通配符的第二个元素相同。

答案 1 :(得分:1)

这似乎是实际问题:

  

输入显示带有数字的嵌套列表及其在子列表中的计数:   [[86,4],[67,1],[89,1],...]输出:我需要知道是否a   其计数的数字已经在列表中(为了不添加它   第二次),但在for循环期间计数未知

有两种方法可以解决这个问题。首先,如果列表没有重复项,只需将其转换为字典:

numbers = dict([[86,4],[67,1],[89,1]])

现在每个数字都是键,并计算一个值。接下来,如果您想知道字典中的数字不是,您可以通过多种方式实现这一目标:

# Fetch the number
try:
   count = numbers[14]
except KeyError:
   print('{} does not exist'.format(14))

# Another way to write the above is:

count = numbers.get(14)
if not count:
    print('{} does not exist'.format(14))

# From a list of a numbers, add them only if they don't
# exist in the dictionary:

for i in list_of_numbers:
   if i not in numbers.keys():
       numbers[i] = some_value

如果原始列表中已经存在重复项,您仍然可以将其转换为字典,但如果要保留数字的所有值,则需要做一些额外的工作:

from collections import defaultdict

numbers = defaultdict(list)

for key,value in original_list:
    numbers[key].append(value)

现在,如果您有重复的数字,它们的所有值都存储在列表中。你仍然可以遵循相同的逻辑:

for i in new_numbers:
   numbers[i].append(new_value)

现在,如果该号码已存在,则new_value只会添加到现有值列表中。

最后,如果第一个号码不存在,如果你想要做的只是添加到列表中:

numbers = set(i[0] for i in original_list)

for i in new_numbers:
   if i not in numbers:
       original_list += [i, some_value]