一步分解列表并分配列表项
Breaking into list and assigning list item in one step
我正在尝试一步更改通过对字符串使用 list
创建的列表的内容。例如,在下面的示例中,我想在一步拆分字符串后立即将第三项(text 更改为 teat) .
即假设我正在尝试更改通过在字符串 text.
上使用 list
创建的列表中的第三项
所以
result= list("text")[2] = "a"
给我
>>> result
'a'
我认为这可能有效,但它没有:
result= (list("text")[2] = "a")
SyntaxError: invalid syntax
我可以这样达到预期的效果:
result=list("text")
result[2]= "a"
这给了我:
>>> result
['t', 'e', 'a', 't']
是否有一条线可以给我想要的结果?
为什么我列出的两次尝试都不行?我应该阅读的 Python 原则是什么阻止我这样做?
如果你需要一个衬垫,这会起作用:
result = "text"[:2]+'a'+"text"[3:]
result
Out[583]: 'teat'
当您为变量赋值时,您的方法不起作用的原因是 returns。即
list("text")[2] = "a"
returns 什么都没有,然后您尝试将其分配给结果。
我会建议定义一个函数,然后调用它会是一个单行代码(为了最干净的代码)。喜欢,
def replace_character(text, ind, letter):
text_list = list(text)
text_list[ind] = letter
return text_list
但如果您正在寻找严格的单线,Allen 的解决方案是不错的选择。这是另一个使用 列表理解.
result = [letter if ind != 2 else "a" for ind, letter in enumerate(list("text"))]
# This basically does,
# Create a list using the characters of list("text")
# if the index of the character is 2, put "a" instead of character
print result
您可以在同一行上有多个用分号分隔的简单语句。所以这是一个单行:
>>> result = list('text'); result[2] = 'z'
>>> result
['t', 'e', 'z', 't']
>>>
虽然不需要一行,同一行的多个语句是officially discouraged
这个构造:
result= list("text")[2] = "a"
不起作用,因为它是链式赋值,因此它将 "a"
赋值给 result
和 list("text")[2]
。但后一个分配并不重要,因为列表从未分配给任何东西,并被丢弃。
从根本上说,您误解的根源在于,在 Python 中,赋值 不是 表达式:它不求值任何东西,所以它不产生一个你可以赋值的值。例如,在 C 语言中,赋值 是 语句并计算赋值的左侧,因此:
#include<stdio.h>
int main(void) {
int a;
printf("%d", a = 10);
return 0;
}
给出以下输出:
10
但在 Python 中,它不是一个表达式,因此当你在它周围加上括号并试图将其分配给其他东西时它会给出 SyntaxError。
我正在尝试一步更改通过对字符串使用 list
创建的列表的内容。例如,在下面的示例中,我想在一步拆分字符串后立即将第三项(text 更改为 teat) .
即假设我正在尝试更改通过在字符串 text.
上使用list
创建的列表中的第三项
所以
result= list("text")[2] = "a"
给我
>>> result
'a'
我认为这可能有效,但它没有:
result= (list("text")[2] = "a")
SyntaxError: invalid syntax
我可以这样达到预期的效果:
result=list("text")
result[2]= "a"
这给了我:
>>> result
['t', 'e', 'a', 't']
是否有一条线可以给我想要的结果?
为什么我列出的两次尝试都不行?我应该阅读的 Python 原则是什么阻止我这样做?
如果你需要一个衬垫,这会起作用:
result = "text"[:2]+'a'+"text"[3:]
result
Out[583]: 'teat'
当您为变量赋值时,您的方法不起作用的原因是 returns。即
list("text")[2] = "a"
returns 什么都没有,然后您尝试将其分配给结果。
我会建议定义一个函数,然后调用它会是一个单行代码(为了最干净的代码)。喜欢,
def replace_character(text, ind, letter):
text_list = list(text)
text_list[ind] = letter
return text_list
但如果您正在寻找严格的单线,Allen 的解决方案是不错的选择。这是另一个使用 列表理解.
result = [letter if ind != 2 else "a" for ind, letter in enumerate(list("text"))]
# This basically does,
# Create a list using the characters of list("text")
# if the index of the character is 2, put "a" instead of character
print result
您可以在同一行上有多个用分号分隔的简单语句。所以这是一个单行:
>>> result = list('text'); result[2] = 'z'
>>> result
['t', 'e', 'z', 't']
>>>
虽然不需要一行,同一行的多个语句是officially discouraged
这个构造:
result= list("text")[2] = "a"
不起作用,因为它是链式赋值,因此它将 "a"
赋值给 result
和 list("text")[2]
。但后一个分配并不重要,因为列表从未分配给任何东西,并被丢弃。
从根本上说,您误解的根源在于,在 Python 中,赋值 不是 表达式:它不求值任何东西,所以它不产生一个你可以赋值的值。例如,在 C 语言中,赋值 是 语句并计算赋值的左侧,因此:
#include<stdio.h>
int main(void) {
int a;
printf("%d", a = 10);
return 0;
}
给出以下输出:
10
但在 Python 中,它不是一个表达式,因此当你在它周围加上括号并试图将其分配给其他东西时它会给出 SyntaxError。