Вы not , так сказать, изменяете список. Вы просто изменяете элементы в списке. Я не думаю, что это проблема.
Чтобы ответить на ваш второй вопрос, оба способа действительно разрешены (как вы знаете, с тех пор, как вы запускали код), но это будет зависеть от ситуации. Является ли содержание изменчивым или неизменным?
Например, если вы хотите добавить один из каждого элемента в список целых чисел, это не сработает:
>>> x = [1, 2, 3, 4, 5]
>>> for i in x:
... i += 1
...
>>> x
[1, 2, 3, 4, 5]
Действительно, int
s являются неизменяемыми объектами. Вместо этого вам нужно будет перебирать индексы и изменять элемент в каждом индексе, например:
>>> for i in range(len(x)):
... x[i] += 1
...
>>> x
[2, 3, 4, 5, 6]
Если ваши элементы изменяемы, то первый метод (непосредственно итерации над элементами, чем индексы) является более эффективным, без сомнения, потому что дополнительный шаг индексации - это накладные расходы, которые можно избежать, поскольку эти элементы изменяемы.
Использование HtmlAgilityPack
string html = @"<span style=""background:lime;Color:Red;"">Contrary to popular belief,.....</span>";
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
foreach (var span in doc.DocumentNode.Descendants("span"))
{
var style = span.Attributes["style"].Value;
span.Attributes["style"].Value = String.Join(";", style.Split(';').Where(s => !s.ToLower().Trim().StartsWith("background:")));
}
var newHtml = doc.DocumentNode.InnerHtml;