现在我知道在迭代循环期间修改列表是不安全的。但是,假设我有一个字符串列表,我想剥离字符串本身。替换可变值算作修改吗?
相关问题请参见for循环中python变量的作用域:给迭代变量赋值不会修改底层序列,也不会影响未来的迭代。
现在我知道在迭代循环期间修改列表是不安全的。但是,假设我有一个字符串列表,我想剥离字符串本身。替换可变值算作修改吗?
相关问题请参见for循环中python变量的作用域:给迭代变量赋值不会修改底层序列,也不会影响未来的迭代。
当前回答
你可以这样做:
a = [1,2,3,4,5]
b = [i**2 for i in a]
它被称为列表理解,让你更容易在列表中循环。
其他回答
这被认为是糟糕的形式。如果需要保留对列表的现有引用,则使用列表理解式,并使用切片赋值。
a = [1, 3, 5]
b = a
a[:] = [x + 2 for x in a]
print(b)
从你的问题中不清楚决定删除哪些字符串的标准是什么,但如果你有或可以列出你想删除的字符串,你可以做以下工作:
my_strings = ['a','b','c','d','e']
undesirable_strings = ['b','d']
for undesirable_string in undesirable_strings:
for i in range(my_strings.count(undesirable_string)):
my_strings.remove(undesirable_string)
my_strings变为['a', 'c', 'e']
简而言之,在迭代同一列表的同时对列表进行修改。
list[:] = ["Modify the list" for each_element in list "Condition Check"]
例子:
list[:] = [list.remove(each_element) for each_element in list if each_element in ["data1", "data2"]]
你可以这样做:
a = [1,2,3,4,5]
b = [i**2 for i in a]
它被称为列表理解,让你更容易在列表中循环。
不,你不会改变列表的“内容”,如果你可以这样改变字符串。但在Python中,它们是不可变的。任何字符串操作都会返回一个新字符串。
如果你有一个对象列表,你知道是可变的,你可以这样做,只要你不改变列表的实际内容。
因此,您将需要做某种类型的映射。如果你使用生成器表达式,它[操作]将在你迭代时完成,你将节省内存。