список вложенных циклов python - PullRequest
0 голосов
/ 23 декабря 2019

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

Я пытаюсь добавить некоторые значения в список в цикле for. Мне удалось это сделать. Но как я могу получить последний список в качестве моей переменной для использования в другом цикле?

Скажем так. Я извлекаю что-то, добавляя их в список в цикле for.

a=list()
for b in hugo:
    a.append(ids)
    print(a)

дает мне

[1]
[1,2]
[1,2,3]
[1,2,3,4]

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

Редактировать:

На самом деле я не пытаюсь заставить кого-то сделать мою домашнюю работу для меня. Я просто тестирую некоторые программы с использованием Python. Здесь идет:

Я пытаюсь написать скрипт для извлечения файлов с конечным именем .dat из препроцессора ANSA с правильным именем и идентификатором файла

Например:

ID       Name
1        hugo1.dat
8        hugo2.dat
11       hugo3.dat
18       hugo4.dat

Вот что я написал:

import os
import ansa
from ansa import base
from ansa import constants
from ansa import guitk

def export_include_content():
  directory = gutik.UserInput('Please enter the directory to Output dat files:')
  ishow=list()
  includes=list()
  setna=list()
  iname=list()

# Set includes variables to collect the elements from a function known as "INCLUDE" from the software
includes=base.CollectEntitites(deck, None, "INCLUDE")

# For loop to get information from the "INCLUDE" function with the end filename ".dat"
for include in includes:
    ret=base.GetEntityCardValues(deck, include, 'NAME', 'ID')
    ids=str(ret['ID'])
    setname=ret['NAME']
    if setname.endswith('dat'):
        ishow.append(ids)
        iname.append(setname)

# Print(ishow) gives me
[1]
[1,8]
[1,8,11]
[1,8,11,18]

# print(iname) gives me
[hugo1]
[hugo1,hugo2]
[hugo1,hugo2,hugo3]
[hugo1,hugo2,hugo3,hugo4]

# Now that I got both of my required list of IDs and Names. It's time for me to save the files with the respective IDs and Names.

for a in ishow:
        test=base.GetEntity(deck,'INCLUDE',int(a))
        print(a)
        file_path_name=directory+"/"+iname
        print(file_path_name)

#print(a) gives me
1
8
11
18

#print(file_path_name) gives me
filepath/[hugo1,hugo2,hugo3,hugo4]
filepath/[hugo1,hugo2,hugo3,hugo4]
filepath/[hugo1,hugo2,hugo3,hugo4]
filepath/[hugo1,hugo2,hugo3,hugo4]

# This is the part I got stuck. I wanted the output to be printed in this order:

1
filepath/hugo1

8
filepath/hugo2

11
filepath/hugo3

18
filepath/hugo4

Но пока мне это не помогает, поэтому я спрашиваю, можете ли вы все помочь мне решить эту проблему:) Помогает оценил !! Спасибо всем

Ответы [ 3 ]

0 голосов
/ 23 декабря 2019

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

a=list()
for b in hugo:
    a.append(ids)
print(a)
0 голосов
/ 23 декабря 2019

Если предположить, что идентификаторы - это просто элементы в hugo:

a=[id for id in hugo]
print(a)

Или

a=hugo.copy()
print(a)

Или

print(hugo)

Или

a=hugo
print(a)

Или

string = "["
for elem in hugo:
  string.append(elem + ",")
print(string[:-1] + "]")

Редактировать: Добавлены более удивительные ответы. Последний - мой любимый.

Редактировать 2:

Ответ на ваш отредактированный вопрос:

Эта часть

for a in ishow:
    test=base.GetEntity(deck,'INCLUDE',int(a))
    print(a)
    file_path_name=directory+"/"+iname
    print(file_path_name)

Требуется изменить на

for i in range(len(ishow)):
    test=base.GetEntity(deck,'INCLUDE',int(ishow[i]))
    file_path_name=directory+"/"+iname[i]

Операторы печати можно оставить, если хотите.

Когда вы пытаетесь сослаться на один и тот же индекс в нескольких списках, лучше использовать for i in range(len(a)), чтобы выможет получить доступ к одному и тому же индексу в обоих.

0 голосов
/ 23 декабря 2019

Ваша проблема с отступом кода:

a=list()
for b in hugo:
    a.append(ids)
print(a)
...