如何获取元素所在的列表?

时间:2016-12-01 17:43:50

标签: python list

说我有两个清单:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<MyCoolModel>().ToTable("MyTab1");
    modelBuilder.Entity<MyCoolModel>().ToTable("MyTab2");

}

L1 = [a, b, c, d]

其中字母可以是任何类型(它没有区别)。

有没有办法问问Python:&#34;哪个列表(L2 = [e, f, g, h] 和/或L1)包含元素&#39; a&#39; (或任何其他元素),并让它返回该列表的名称?

5 个答案:

答案 0 :(得分:5)

为了实现这一目标,更好的数据结构将使用dict。例如:

my_list_dict = {
    'L1': ['a', 'b', 'c', 'd'],
    'L2': ['e', 'f', 'g', 'h']
}

然后你可以创建一个自定义函数来实现你的任务:

def find_key(c):
    for k, v in my_list_dict.items():
        if c in v:
            return k
    else:
        raise Exception("value '{}' not found'.format(c))

示例运行:

>>> find_key('c')
'L1'
>>> find_key('g')
'L2'

答案 1 :(得分:1)

检查使用:

if 'a' in l1:
    print "element in l1" #or do whatever with the name you want
elif 'a' in l2:
    print "element in l2"
else:
    print "not in any list"

或使用类似的功能:

def ret_name(c,l1,l2):
    if c in l1:
        return 1
    elif c in l2:
        return 2
    else:
        return 0
x=ret_name('a',l1,l2)
#and check if x=1 or x=2 or x=0 and you got your ans.

答案 2 :(得分:1)

我们仅限L1L2这样做。

def contains(elem):
    return 'L1' if elem in L1 else 'L2'

为了灵活性,您可以将列表作为元组列表(list object, list name in string)传递。

>>> contains(a, [(L1, 'L1'), (L2, 'L2')])
>>> 'L1'

请注意,如果多个列表包含元素(elem),该函数将根据订单返回tups中提供的第一个列表。

def contains(elem, tups):
    for tup in tups:
        if elem in tup[0]: // list object
            return tup[1]  // list name

    return 'Not found'

答案 3 :(得分:1)

虽然不鼓励,但如果通过globals()过滤将列表名称定义为程序中的变量,则可以动态获取列表名称。

L1 = ['a', 'b', 'c', 'd']
L2 = ['e', 'f', 'g', 'h']

has_a = [k for k, l in globals().items() if isinstance(l, list) and 'a' in l]

print(has_a)
# ['L1']

答案 4 :(得分:0)

这是我的解决方案,我发现它非常好:)

L1,L2 = ['a', 'b', 'c', 'd'],['e','f','g','h']
n = input('Enter a letter: ')
while True:
      if n in L1:
            print('Letter %s is contained inside L1 list!' %(n))
            break
      else:
            print('Letter %s is contained inside L2 list!' %(n))
            break

我希望它有助于快乐编码!