如何在不使用其他列表的情况下更改列表中的所有元素

时间:2017-05-18 12:13:26

标签: python list

如何在不使用其他列表的情况下更改列表中的所有元素?

my_list

我想加“!”使所有元素["a!","b!","c!","d!"]等于<script> $(window).scroll(function() { if($(window).scrollTop() >= 100) { $('div#myTopnav').addClass('scrolled'); $('a').addClass('scrolled2'); } else { $('div#myTopnav ').removeClass('scrolled'); $('a').removeClass('scrolled2'); } }); function myFunction() { $("#myTopnav").toggleClass('responsive'); } </script>

我知道我可以通过创建新列表来实现这一目标,但我需要在没有第二个(新)列表的情况下完成此任务。

6 个答案:

答案 0 :(得分:6)

列表是可变的,所以这将起作用:

my_list = ["a","b","c","d"]
for index, item in enumerate(my_list):
    my_list[index] = '{}!'.format(item)

更典型的是使用列表理解:

my_list = ('{}!'.format(item) for item in my_list)

这会创建一个新列表并将其重新绑定到my_list。为了满足您的“不使用其他列表”要求,您可以使用以下命令更新列表:

my_list[:] = ('{}!'.format(item) for item in my_list)

它不会创建任何新的或中间列表,因此它可以为您提供最佳的两者,即可读的Pythonic代码以及内存和时间的效率(生成器表达式通常比for循环更快)。

答案 1 :(得分:3)

如果您担心不创建新列表,可以使用for循环

my_list = ["a","b","c","d"]

>>> id(my_list)
4077896

for i in range(len(my_list)):
    my_list[i] += '!'    

>>> my_list
['a!', 'b!', 'c!', 'd!']
>>> id(my_list)
4077896

否则,单行解决方案是创建一个新列表并将其分配回去,但请注意id将会更改,因为它确实是一个新列表。

>>> my_list = [i+'!' for i in my_list]
>>> my_list
['a!', 'b!', 'c!', 'd!']

答案 2 :(得分:1)

您可以使用列表的索引访问权限来更改值:

my_list = ["a","b","c","d"]
for ix in range(len(my_list)):
    my_list[ix] = my_list[ix] + '!'

答案 3 :(得分:1)

试试这个 -

my_list = ['a', 'b', 'c', 'd']
for i, e in enumerate(my_list):
   my_list[i] += "!"

print my_list

如果你想忽略没有新的列表约束列表,理解将是一个好主意。像这样 -

my_list = [e + "!" for e in my_list]

答案 4 :(得分:1)

你的意思是:

for i in range(len(my_list)):
    my_list[i] += "!"

但为什么坚持不使用其他名单?更好的方法是:

my_list = [e + "!" for e in my_list]

出于纯粹的好奇心:

import time

def opt1():
    my_list = ["a","b","c","d"]
    for i in range(len(my_list)):
        my_list[i] += "!"

def opt2():
    my_list = ["a","b","c","d"]
    my_list = [e + "!" for e in my_list]

def test(func, count):
    begin = time.time()
    for i in range(count):
        func()
    return time.time() - begin

print("Option 1: {}".format(test(opt1, 1000000)))
print("Option 2: {}".format(test(opt2, 1000000)))

给出

Option 1: 0.952999830246
Option 2: 0.640000104904

答案 5 :(得分:0)

你可以使用python list comprehension:

my_list = ["a","b","c","d"]
my_list = [x+"!" for x in my_list]