Доступ к элементам кортежа во вложенном списке python - PullRequest
1 голос
/ 16 июня 2020

Я новичок в python, у меня есть список с вложенным списком, а внутри он содержит кортежи, как показано ниже

[('dad', 'mom', 'test1.txt')]
[('brother', 'sister', 'test2.txt')]
[('uncle', 'aunty', 'test3.txt')]
[('grandpa', 'grandma', 'test4.txt')]

Я хотел бы получить доступ к одному списку за раз, для Например, я открываю файл test1.txt из 1-й индекс списка [2] , и если присутствуют строки 'папа' и 'мама' , то фильтруйте файл и прочтите его аналогично для text2 .txt файл, если 'brother' и 'sister' присутствуют, затем считайте и отфильтруйте.

У меня есть код ниже:

for data in list:
    file= data[2]
    text_file= open(file,'r').readlines()
    if data[0], data[1] in text_file:
    #do something..

Приведенный выше код не дает мне правильный выход в соответствии с требованиями. Может ли кто-нибудь помочь мне с этим подходом?

Спасибо!

Ответы [ 4 ]

1 голос
/ 09 июля 2020

Вот как я это сделал:

lis=[[('dad', 'mom', 'test1.txt')],
    [('brother', 'sister', 'test2.txt')],
    [('uncle', 'aunty', 'test3.txt')],
    [('grandpa', 'grandma', 'test4.txt')]]
for i in range(len(lis)):
    for j in lis[j]:
        f = open(i[2])
        lines = f.read()
        if i[0] in lines and i[1] in lines:
            #do sth

Я повторил элементы списка в диапазоне из length of the list: len(lis). Таким образом, j принимает значения 0, 1, 2, 3. Затем я использовал for loop, который перебирает элементы списка. Следовательно, j принимает значения элементов lis как lis[0], lis[1], lis[2], lis[3].

Теперь, когда j имеет значения элементов списка, мы можем использовать i[(integer)] и получить доступ к элементам элементов списка, т.е. "dad", "mom", "test1.txt", et c.

Следовательно, мы можем применить условия к i[0] or i[1] et c.

Например:

if i[0] == "dad":
    print(something)

Надеюсь, это тебе поможет!

0 голосов
/ 09 июля 2020
lis=[[('dad', 'mom', 'test1.txt')],
    [('brother', 'sister', 'test2.txt')],
    [('uncle', 'aunty', 'test3.txt')],
    [('grandpa', 'grandma', 'test4.txt')]]
for i in lis:
    data=i[0][2]
    f=open(data,'r')
    file=f.read()
    if (i[0][0] and i[0][1])in file:
        pass
0 голосов
/ 16 июня 2020

Старайтесь не использовать такие ключевые слова, как list

L=[[('dad', 'mom', 'test1.txt')],
[('brother', 'sister', 'test2.txt')],
[('uncle', 'aunty', 'test3.txt')],
[('grandpa', 'grandma', 'test4.txt')]]
for data in L:
  f=data[0][2]
  file1=open(f,"r")
  text_file=file1.read()
  if(data[0][0] and data[0][1] in text_file):
     #do something
0 голосов
/ 16 июня 2020

Непонятно, что для вас не так, поскольку вы читаете правильное имя файла 4 раза

Полагаю, вам нужно выйти из for l oop, если вы найдете то, что ищете, с помощью оператора break.

...