2016-10-02 2 views
0

Я хочу, чтобы иметь возможность искать строку для символов в разных списках.Определить, где символы находятся в нескольких списках

Например:

песни1 = [ 'а']

песни2 = [ 'B']

Если пользователь вводит в 'а', например. Python должен напечатать «» list1

Однако, если пользовательский ввод был «аб», то Python должен распечатать и песни1 песни2

Прямо сейчас я пытаюсь использовать эту функцию, чтобы запросить список, но у меня есть для запроса каждого списка в двух отдельных операциях if, например.

def char_search(input_str): 
    for char in input_str: 
     if char in list1: 
      print("lower") 
     if char in list2: 
      print("Upper") 
+0

Почему вы отменили ответ – Nyakiba

ответ

0

Итак, у вас есть несколько списков:

list1 = [ ... ] 
list2 = [ ... ] 
... 

Сначала вы должны быть в состоянии собрать все, что списки вместе, а затем проверить, если каждый список содержит указание item:

for lst in list1, list2, list3: 
    if mychar in lst: 
     print(lst) 
     break 
else: 
    print('Specified lists do not contain', mychar) 

Обратите внимание, что он останавливается, как только находит элемент в одном из списков. А также, не печатает имя списка - если вы хотите его, вам нужно сделать список с именем, как:

class NamedList(list): 
    def __init__(self, *args, name=None, **kwargs): 
     self.name = name 
     super().__init__(*args, **kwargs) 

    def __str__(self): # only if you need that specific use 
     if self.name is not None: 
      return str(self.name) 
     return super().__str__() 

# Then use as follows 
std = NamedList(['ISO', 'GOST', 'etc'], name='Standards') 
sizes = NamedList(['A4', 'Letter'], name='Paper sizes') 

smthng = 'Letter' 

for nlst in std, sizes: 
    if smthng in nlst: 
     print(nlst) # gives you 'Paper sizes' 

Исправление: для Python 2.x/3.x совместимый, this

+0

И я даже не упоминаю игру с 'vars()' или 'globals() '- это такой грязный непифонный способ, но да, вы могли бы искать все пространство имен для списков, проверять, указан ли указанный объект в одном из них, и напечатать имя переменной, связанное с этим списком. Это был бы плохой подход, но это точный ответ на заданный вопрос. – thodnev

+0

Привет, Я пытаюсь получить ваш ответ на работу, но я получаю синтаксическую ошибку, когда вы начали определять функцию под классом NamedList (список) ... –

+0

@JoshuaStokes, я думаю, это потому, re с использованием python 2.x. В исходном вопросе нет упоминания о версии, поэтому я использую 3.x в ответе. Если вы хотите заставить его работать под 2.x, используйте его: http://pastebin.com/G7A8a987 – thodnev

1
choice = input("choose a letter") 

if choice in list1: 
    print(list1) 
elif choice in list2: 
    print(list2) 
else: 
    print("choice not listed") 
+0

Если '' выбор' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', ', но ОП указал, что он должен печатать оба списка. – LMc

2

Пример

list_1 = ['a', 'b', 'c'] 
list_2 = ['d', 'e', 'f'] 

input = 'b' 

if input in list_1: 
    print "list1" 

if input in list_2: 
    print "list2" 

Выход будет «песни1»

2
list1 = ['a'] 
list2 = ['b'] 

if (input[0] in list1 or input[1] in list1) and (input[0] in list2 or input[1] in list2): 
    print "Choice listed" 

Это работает, если вы хотите, чтобы убедиться, что оба персонажа находятся по крайней мере в одном списке. Для более входных символов, которые вы можете добавить некоторую простую логику цикла

+0

Привет, я должен был отменить ваш ответ, потому что мне нужно было точно знать, в каком списке перечислены все персонажи, без ограничения количества символов ... –

Смежные вопросы