2017-08-23 25 views
0

我不太确定如何将其加入,这可能是Google为什么没有帮助。但说我有以下几点:构建一个包含默认项目的列表

a = ['begin', 'end'] 
for x in range(10): 
    a.insert(-1, x) 
print(a) 

输出:

['begin', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'end'] 

我怎么会做出与默认项目['begin', 'end']列表理解等于上面的输出列表?

编辑:

我的意思默认的项目是,无论“开始”和“结束”,你可以使用列表解析生成的“开始”和“端之间的数字“永远是他们的地方。

最接近的答案,我的问题是@ whackamadoodle3000谁基本上是做了以下虽然不完全:

result = ['start'] + [x for x in range(10)] + ['end'] 

我混乱的根源是,我想我可以做的一切,在列表理解是这样的:

result = [['start'] + [x for x in range(10)] + ['end']] 

另外我忘了你可以合并列表与加法运算符。

+0

目前还不清楚你在问什么。 “用列表构造函数”是什么意思? “默认项目”是什么意思?如果你想写一个函数,你能显示调用函数的样子吗? – user2357112

+1

你的代码片段根本不起作用。 – innisfree

+0

这听起来像是你的问题可能只是你的示例代码中的错误 - 你忘记将列表保存到'x'变量,并且你的循环应该是'for in ...'而不是'for x in .. .',因为你的循环体将循环变量称为'a',而不是'x'。 – user2357112

回答

1
default = ['begin', 'end'] 
result = [default[0]] + [x for x in range(10)] + [default[1]] 

这应该工作

+0

'result = [default [0]] + [x for range(10)] + [default [1]]' – innisfree

+0

好的,编辑 –

2

为什么不创建产生“开始”,所提供的可迭代的两侧“结束”的功能。

def markedrange(iterable, markers=('start', 'end')): 
    yield markers[0] 
    yield from iterable 
    yield markers[1] 

print(list(markedrange(range(10)))) 
print(list(markedrange(['a', 'b', 'c', 'd'], markers=('hi', 'bye')))) 

结果:

['start', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'end'] 
['hi', 'a', 'b', 'c', 'd', 'bye'] 

如果你是一个较旧的Python版本和你没有yield from,则应该在一个循环中产生。

例如

for i in iterable: 
    yield i 
+1

你应该提到这只适用于3.3+。 –

+0

没问题。我认为这不是你想要的,因为它不使用列表理解(?)。然而,它的优点是不需要创建临时列表来追加到生成列表的开始和结尾。 –

+0

@PaulRooney最初我想知道我是否可以在列表理解中做到这一点,但您的答案确实提供了另一个最受赞赏的角度。 –

相关问题