如何在不使用其他列表的情况下更改列表中的所有元素?
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>
。
我知道我可以通过创建新列表来实现这一目标,但我需要在没有第二个(新)列表的情况下完成此任务。
答案 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]