构造具有默认项的列表

时间:2017-08-23 23:44:42

标签: python python-3.x

我不确定如何说出来,这可能是谷歌没有帮助的原因。但是说我有以下内容:

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']]

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

2 个答案:

答案 0 :(得分:2)

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

这应该有效

答案 1 :(得分:2)

为什么不创建一个能够产生" start"和"结束"在提供的iterable的任一侧。

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,则应该循环播放。

e.g。

for i in iterable:
    yield i