不理解在python中将循环转换为列表的代码
我是python新手,并获得以下代码:不理解在python中将循环转换为列表的代码,python,Python,我是python新手,并获得以下代码: nlist = autoscaling_connection.get_all_launch_configurations() name = "CONFIG" versions = [x.name[len(name):] for x in nlist if (x.name.startswith(name) and is_number(x.name[len(name):]))] 我知道for循环被连接到版本列表中,但我
nlist = autoscaling_connection.get_all_launch_configurations()
name = "CONFIG"
versions = [x.name[len(name):] for x in nlist
if (x.name.startswith(name) and is_number(x.name[len(name):]))]
我知道for循环被连接到版本列表中,但我不理解分配:
[x.name[len(name):]
我将展开整个代码,然后进行检查
versions = [x.name[len(name):] for x in nlist
if (x.name.startswith(name) and is_number(x.name[len(name):]))]
相当于
versions = []
for x in nlist:
if (x.name.startswith(name) and is_number(x.name[len(name):])):
versions.append(x.name[len(name):])
至于什么
x.name[len(name):]
表示从x.name开始,从索引等于len(name)
(name的长度)到x.name
在一个简单的例子中,假设我有一个列表
my_list = [1, 2, 3, 4, 5]
我也是
my_list[2:]
然后这会回来
[3, 4, 5]
这与从第2个元素到结尾的顺序相同
我希望这有帮助。如果您想进一步了解python切片表示法,我可以推荐另一个SO问题:在python中,如果
x
是一个列表,I
是一个索引(整数)
表示“从索引i
开始到结尾的x
中的所有项目”
你也可以
x[i:j]
x
中的所有项目从索引i
一直到,但不包括j
x
中的所有项目从开头一直到,但不包括j
“复制新列表中x的所有元素并将其分配给y”
“x的每三个元素,从索引2开始,在索引9之前结束。”
我建议您在Python中查找更多列表属性。稍微完整(但经过猜测)的代码:
输出:
['2', '4', '2711999']
为什么?
列表理解测试nlist
的每个元素
它只允许将内容放入通过if(x.name.startswith(name)和is_number(x.name[len(name):])统计的版本中
含义:每个类实例name
必须以变量name
的内容开头,并且name
获得的字符数之后的任何字符都必须检查为True
,如果输入到is_number()
如果符合,它将使用“数字部分”并将其作为元素添加到结果列表中
"Fiat Dupe 09" # not in the list, because "Dupe 09" is not True
"DosntFly 0815" # not in the list, because not starting with "Fiat "
什么是name
?它是从外部定义的。那么nlist
呢?@madpysicast这在这里并不重要,因为他只是询问列表理解的语法。(尽管如果他试图提供MVCE的话会这样):)当然。我鼓励他问更清楚的问题,但不是坚持。可能的重复添加了nlist和name2th的定义?尼斯:)+我就是为了这个。除了索引2是第三个元素之外。你应该把它修好。
y = x[:]
y = x[2:9:3]
class K:
"""A class that has a name property"""
def __init__(self,name):
self.name = name
# a prefix to look for
name = "Fiat "
# a list of objects that have a name - some starting with our name
nlist = [K("Fiat 2"), K("Fiat 4"), K("Fiat 2711999"), K("Fiat Dupe 09"), K("DosntFly 0815")]
def is_number(text):
"""Test if the text is an integer."""
try:
int(text.strip())
except:
return False
return True
versions = [x.name[len(name):] for x in nlist
if (x.name.startswith(name) and is_number(x.name[len(name):]))]
print(versions)
['2', '4', '2711999']
"Fiat Dupe 09" # not in the list, because "Dupe 09" is not True
"DosntFly 0815" # not in the list, because not starting with "Fiat "