【发布时间】:2021-06-27 03:39:08
【问题描述】:
目标是在列表中除最后一个元素之外的每个其他元素之后插入一个字符串:
arr0 = ['aa','bb','cc','dd']
目标
['aa','XX','bb', 'XX','cc','XX','dd']
这个话题已经在this 之类的帖子中得到解决,但是使用的字符串列表只有一个字符的长度,这会影响列表的理解。我没有足够的声望点来发表评论并要求澄清。
我已经使用 for 循环实现了它,但我正在尝试使用列表理解进行练习,并且希望了解我在哪里出错了。目前收到SyntaxError: invalid syntax。
示例和当前实现
arr0 = ['aa','bb','cc','dd'] # Goal ['aa','XX','bb', 'XX','cc','XX','dd']
# Stop for range
total = len(arr0)*2-1
for i in range(1, total, 2):
arr0.insert(i, "XX")
# Returns ['aa', 'XX', 'bb', 'XX', 'cc', 'XX', 'dd']
列表理解尝试:
[el for y in [[el, 'XX'] if idx != len(arr0)-1 else el for idx, el in enumerate(arr0)] for el in y if isinstance(y, list) else el]
分解
[[el, 'XX'] if idx != len(arr0)-1 else el for idx, el in enumerate(arr0)]
# Returns
# [['aa', 'XX'], ['bb', 'XX'], ['cc', 'XX'], 'dd']
在外部理解中,我试图将其作为单个字符串列表返回。我正在尝试使用isinstance 来检查元素是否为列表(最后一项是字符串),如果不是则仅返回字符串。
编辑
我非常感谢您的回复。我应该包括我确实遇到的这种替代情况,即我不希望在末尾的“Note”元素之后插入元素,在这种情况下我无法执行切片。是否可以使用 step 进行负索引?
# Alternative scenario
arr1 = ['aa','bb','cc','dd', 'Note']
# ['aa','XX,'bb','XX,'cc','XX,'dd','Note']
【问题讨论】:
标签: python for-loop nested list-comprehension nested-loops