при попытке добавить и удалить любой элемент в список он пропускает одно конкретное значение в Python

#python-3.x #list

#python-3.x #Список

Вопрос:

Я пытаюсь заменить расширение ‘.hpp’ расширением ‘.h’. Но проблема, как только я попытался добавить строку «filenames.remove (i_new)», она пропускает одно конкретное значение «sample.hpp». Вот мой код:

 filenames = ["program.c", "stdio.hpp", "sample.hpp", "a.out", "math.hpp", "hpp.out",]
# Generate newfilenames as a list containing the new filenames
# using as many lines of code as your chosen method requires.
for i in filenames:
    if i[-3:] == "hpp":
        print(i)
        i_new = i[:-3] "h"
        print(i_new)
        filenames.append(i_new)
        print(filenames)
for i in filenames:
    if i[-3:] == "hpp":
        print(i)
        filenames.remove(i)
        print(filenames)

print('new_filenames', filenames)
  

Вот результат:

 stdio.hpp
stdio.h
['program.c', 'stdio.hpp', 'sample.hpp', 'a.out', 'math.hpp', 'hpp.out', 'stdio.h']
sample.hpp
sample.h
['program.c', 'stdio.hpp', 'sample.hpp', 'a.out', 'math.hpp', 'hpp.out', 'stdio.h', 'sample.h']
math.hpp
math.h
['program.c', 'stdio.hpp', 'sample.hpp', 'a.out', 'math.hpp', 'hpp.out', 'stdio.h', 'sample.h', 'math.h']
stdio.hpp
['program.c', 'sample.hpp', 'a.out', 'math.hpp', 'hpp.out', 'stdio.h', 'sample.h', 'math.h']
math.hpp
['program.c', 'sample.hpp', 'a.out', 'hpp.out', 'stdio.h', 'sample.h', 'math.h']
new_filenames ['program.c', 'sample.hpp', 'a.out', 'hpp.out', 'stdio.h', 'sample.h', 'math.h']
  

Ответ №1:

я могу использовать:

 new_filenames = [i.replace('.hpp','.h') for i in filenames]
print('new_filenames', newfilenames)
  

и вывод:

 ['program.c', 'stdio.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']
  

Вот другой способ, с помощью ‘hpp.hpp’:

 filenames = ["program.c", "stdio.hpp","hpp.hpp" ,"sample.hpp", "a.out", "math.hpp", "hpp.out"]
newfilenames = []
#  newfilenames as a list containing the new filenames

for i in filenames:
    if i[-4:] == ".hpp":
        i = i[:-2]
        newfilenames.append(i)
    else:  newfilenames.append(i) 

print(newfilenames) 
  

и вывод:

 ['program.c', 'stdio.h', 'hpp.h', 'sample.h', 'a.out', 'math.h', 'hpp.out']
  

Но кто-нибудь может мне помочь, что я упускаю???

Комментарии:

1. Рассматривали ли вы случай, когда имя файла hpp.hpp ?

2. hpp.hpp работал над программой answerd. но если я сделаю это с помощью программы, описанной в вопросе, она решит sample.h, но пропустит значение hpp.hpp при удалении или добавлении.

3. new_filenames = [i.replace(‘.hpp’,’.h’) для i в именах файлов] print(‘new_filenames’, newfilenames) — этот код не пропускает hpp.hpp