2015-02-18 2 views
1

Я пишу python def, который примет входной аргумент любого типа: [(список кортежей)] или [[список списков]], и это будет приводят к различным методам обработки. Похоже, у них обоих есть тип «list»(). Как различать эти два разных типа данных, которые пользователь может ввести?ТИП различает список списков и список кортежей в python

Спасибо.

+1

Они оба «списки», поэтому, конечно, они имеют одинаковый тип. Вам нужно будет проверять каждый элемент, потому что, возможно, кто-то отправляет список смешанных списков и кортежей. – larsks

+1

Вам действительно нужно различать список списков и список кортежей? Наверное, нет, не так ли? –

ответ

5

Получить тип первого элемента в списке.

if isinstance(x, list) and len(x) != 0: 
    if isinstance(x[0], list): 
     # Do stuff for list of lists 
    elif isinstance(x[0], tuple): 
     # Do stuff for list of tuples 

Конечно, убедитесь, что x является list и что у него есть пункт в нем.

Кроме того, это разрушается, если вы получаете список со смешанными списками и кортежами. Возможно, было бы лучше провести различие позже и обработать список, содержащий список, в обоих случаях, если сможете. В противном случае вам необходимо проверить каждый элемент в списке.

+0

_isinstance_ is cleaner – volcano

3

Предполагая, что это список список или список кортежей:

def doit(value): 
    if isinstance(value, list): 
     if isinstance(value[0], list): 
      print 'process list' 
     elif isinstance(value[0], tuple): 
      print 'process tuple' 
+0

Большое вам спасибо. – user3658306

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