Учитывая Ваш обновленный вопрос, давайте предположим, что a, b, c, d
переменные находятся в глобальной области
value = 'a'
a = ['a','b','c']
b = ['d','e','f']
d = ['g','h','i']
c = ['j','k','l']
w = next(n for n,v in filter(lambda t: isinstance(t[1],list), globals().items()) if value in v)
print(w)
производит
a
ie имя первого списка в глобальном пространстве имен, которое содержит value
Если переменные находятся в локальной области видимости, например. внутри функции, вы можете использовать вместо locals()
def f():
a = ['a','b','c']
b = ['d','e','f']
d = ['g','h','i']
c = ['j','k','l']
w = next(n for n,v in filter(lambda t: isinstance(t[1],list), locals().items()) if value in v)
print(w)
f()
производит
a
Примечание: Вы можете принять именовании для нацеливания на определенную группу переменных, например targ_
в качестве префикса
targ_a = ['a','b','c']
targ_b = ['d','e','f']
targ_d = ['g','h','i']
targ_c = ['j','k','l']
w = next(n for n,v in filter(lambda t: isinstance(t[1],list) and t[0].startswith('targ_'), globals().items()) if value in v)
print(w)
производит
targ_a
Чтобы объяснить вещи немного более подробно, давайте посмотрим на то, что globals()
возвращается вызова.Например с помощью питона оболочки
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> value = 'a'
>>> targ_a = ['a','b','c']
>>> targ_b = ['d','e','f']
>>> targ_d = ['g','h','i']
>>> targ_c = ['j','k','l']
>>> globals()
{'targ_d': ['g', 'h', 'i'], 'targ_c': ['j', 'k', 'l'],
'__builtins__': <module 'builtins' (built-in)>,
'__doc__': None, '__package__': None,
'__loader__': <class '_frozen_importlib.BuiltinImporter'>,
'targ_a': ['a', 'b', 'c'], '__name__': '__main__',
'targ_b': ['d', 'e', 'f'], '__spec__': None, 'value': 'a'}
, как вы можете видеть, globals()
возвращает словарь. Его ключи - это имена переменных, определенных в глобальном пространстве имен. Его значения - это значение, удерживаемое каждой такой переменной.
Поэтому
>>> next(n for n,v in filter(lambda t: isinstance(t[1],list) and t[0].startswith('targ_'), globals().items()) if value in v)
'targ_a'
итерацию один раз на генераторе, полученного с помощью выражения, которое дает каждое имя в глобальном пространстве имен, который соответствует списку, название которого начинается с targ_
и содержит элемент, равный value
. Он делает это путем итерации по словарю, возвращаемому вызовом globals
какие значения находятся в списке, они другие списки или строковые значения в списках или цифр ... –
'[я для я в [а, Ь, с , d] если значение в i] ' –
Вы хотите, чтобы переменная, содержащая список, была возвращена или содержимое списка (ов), где они были найдены? т. е. каков ваш ожидаемый результат? –