2013-12-23 3 views
0

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

("1", "08:15:25", "17161234567") 

Третий элемент кортежа является номером телефона, и я пытался напечатать кортежи, которые соответствуют другому кортежу кодов зон, который выглядит следующим образом:

ac = (212, 312, 716) 

код, который я написал, чтобы попытаться проверьте, что это выглядит так:

def check(tuplename): 
    results = [] 
    for row in tuplename: 
     if any(ac in x for x in tuplename): 
      results.append(x) 
    print(results) 

Другой код, который я читал, похоже, касается симметричного сравнения списков, который, похоже, не является тем, что я ищу. Выход пустой список:

[] 
+0

'results.append (x)' не похоже на отступ – TerryA

+0

Извините, это в моем коде. Я починил это. – user3130952

+0

У ваших кортежей есть строки? Если это так, вам нужно показать кавычки вокруг них. '08: 15: 25' не является допустимым значением Python, так что элемент будет * иметь * как строку. –

ответ

0

Сначала вам нужно на самом деле извлечь код города, который х [1: 4] Тогда просто проверить, если это в вашей области кода кортежа

предполагающей: tuplename список этих кортежей, например, так:

tuplename = [(1, "08:15:25", "17161234567"), (2, "12:41:08", "12127654321")] 

тогда ваша функция будет переписать в виде:

def check(tuplename): 
    results = [] 
    for row in tuplename: 
     tel = row[2] # extract phone number from tuple 
     tuple_ac = tel[1:4] # extract area code from phone number 
     if tuple_ac in ac: 
      results.append(x) 
    print(results) 
0

Предполагая, что tuplename представляет собой последовательность строк, и вы хотите вернуть соответствующие строки, check должно быть:

def check(tuplename): 
    return [row for row in tuplename if any(code in row[2] for code in ac)] 

Это проверяет каждый элемент в ac против row[2], столбец номер телефона, производя список совпадающих строк чтобы вернуться со списком.

Если вы чувствуете, что список понимание не легко расшифровать, эквивалентная версия петли:

def check(tuplename): 
    results = [] 
    for row in tuplename: 
     if any(code in row[2] for code in ac): 
      results.append(row) 
    return results 
0

Если предположить, что список кодов области фактически строки:

rows = [('1', '08:15:25', '17161234567'), 
     ('2', '08:15:26', '12121234567'), 
     ('3', '08:15:27', '19991234567'), 
     ('4', '08:15:28', '13121234567')] 
codes = ('212', '312', '716') 

for item in (row for row in rows if row[2][1:4] in codes): 
    print(item) 

Выход:

('1', '08:15:25', '17161234567') 
('2', '08:15:26', '12121234567') 
('4', '08:15:28', '13121234567') 
Смежные вопросы