遍历列表并更改值
Iterator over list and change values
我正在尝试遍历变量列表并根据需要对它们进行更改。任何人都可以帮助解决这个问题吗?当我第二次打印时,列表没有改变。我希望 b
和 c
分别为 {'lol'}
{'test'}
。我正在尝试这样做,而不是为值创建新列表而是修改原始变量。
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print a, b, c, d
f = lambda x: '{' + x + '}' if ',' not in x else x
for i in [a, b, c, d]:
if i:
i = f(i)
print a, b, c, d
更新:
def do_work(self, args):
if args.a:
if ',' not in args.a:
args.a = '{' + args.a + '}'
if args.b:
if ',' not in args.b:
args.b = '{' + args.b + '}'
self.do_more_work(args)
您没有对以下行中的 list.Actually 应用任何更改:
i = f(i)
i
只是一个一次性变量,并不指向您的列表项。
通过重新分配它,您只是暂时更改它直到下一次迭代。
如果您想更改需要通过索引访问它们的列表项,您可以将列表放在变量中并遍历列表对象,然后通过索引更改项目。为此,您可以使用 enumerate
,如下所示:
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print(a, b, c, d)
f = lambda x: '{' + x + '}' if ',' not in x else x
my_list = [a, b, c, d]
for i,j in enumerate(my_list):
if j:
my_list[i] = f(j)
print (my_list)
或者作为一种更像 Python 的方式,您可以使用列表理解:
my_list = ([f(i) if i else i for i in my_list])
map
你的 lambda 函数,map 遍历一个列表并为生成新列表的每个元素应用一个函数:
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print(a, b, c, d)
f = lambda x: '{' + x + '}' if x and ',' not in x else x
my_list = [a, b, c, d]
my_list = map(f, my_list)
print (my_list)
编辑
如果您需要更改原始值(如评论所述),您可以解压它们:
a, b, c, d = my_list = map(f, my_list)
print(my_list)
print(a)
print(b)
print(c)
print(d)
['a,b', '{lol}', '{Test}', None]
a,b
{lol}
{Test}
我正在尝试遍历变量列表并根据需要对它们进行更改。任何人都可以帮助解决这个问题吗?当我第二次打印时,列表没有改变。我希望 b
和 c
分别为 {'lol'}
{'test'}
。我正在尝试这样做,而不是为值创建新列表而是修改原始变量。
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print a, b, c, d
f = lambda x: '{' + x + '}' if ',' not in x else x
for i in [a, b, c, d]:
if i:
i = f(i)
print a, b, c, d
更新:
def do_work(self, args):
if args.a:
if ',' not in args.a:
args.a = '{' + args.a + '}'
if args.b:
if ',' not in args.b:
args.b = '{' + args.b + '}'
self.do_more_work(args)
您没有对以下行中的 list.Actually 应用任何更改:
i = f(i)
i
只是一个一次性变量,并不指向您的列表项。
通过重新分配它,您只是暂时更改它直到下一次迭代。
如果您想更改需要通过索引访问它们的列表项,您可以将列表放在变量中并遍历列表对象,然后通过索引更改项目。为此,您可以使用 enumerate
,如下所示:
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print(a, b, c, d)
f = lambda x: '{' + x + '}' if ',' not in x else x
my_list = [a, b, c, d]
for i,j in enumerate(my_list):
if j:
my_list[i] = f(j)
print (my_list)
或者作为一种更像 Python 的方式,您可以使用列表理解:
my_list = ([f(i) if i else i for i in my_list])
map
你的 lambda 函数,map 遍历一个列表并为生成新列表的每个元素应用一个函数:
a = 'a,b'
b = 'lol'
c = 'Test'
d = None
print(a, b, c, d)
f = lambda x: '{' + x + '}' if x and ',' not in x else x
my_list = [a, b, c, d]
my_list = map(f, my_list)
print (my_list)
编辑
如果您需要更改原始值(如评论所述),您可以解压它们:
a, b, c, d = my_list = map(f, my_list)
print(my_list)
print(a)
print(b)
print(c)
print(d)
['a,b', '{lol}', '{Test}', None]
a,b
{lol}
{Test}