有问题将元组附加到元组列表

时间:2017-07-17 20:35:21

标签: python list python-3.x

我有两个列表,其中包含来自文本文件的特定订阅源的开头和结尾的行号: startPosOfFeeds = [1, 35]endPosOfFeeds = [34, 56] 我想将这两个列表转换为这样的元组列表: list_of_tuples = [(1,34), (35, 56)]

鉴于我只在len(startPosOfFeeds) == len(endPosOfFeeds)

时执行上述操作

我的代码:

numOfFeeds = len(startPosOfFeeds)
print(numOfFeeds)
print(startPosOfFeeds)
print(endPosOfFeeds)

for i in range(numOfFeeds):
    list_of_tuples = []
    print(i)
    print(str(startPosOfFeeds[i])+'......'+str(endPosOfFeeds[i]))
    list_of_tuples.append(startPosOfFeeds[i],endPosOfFeeds[i])
print(list_of_tuples)

输出错误:

2
[1, 35]
[34, 56]
0
1......34
1
35......56
[(35, 56)]    

我不确定为什么列表list_of_tuples只保留最后一个附加值。

1 个答案:

答案 0 :(得分:4)

每次迭代都会创建一个空列表:

for i in range(numOfFeeds):
    list_of_tuples = []   # <-- this creates the empty list in each iteration
    ...
    list_of_tuples.append((startPosOfFeeds[i],endPosOfFeeds[i]))

解决方案非常简单:将list_of_tuples = []放在循环前面:

list_of_tuples = []
for i in range(numOfFeeds):
    ...
    list_of_tuples.append((startPosOfFeeds[i],endPosOfFeeds[i]))

请注意,您也可以使用zip和列表理解:

list_of_tuples = [(startpos, endpos) for startpos, endpos in zip(startPosOfFeeds, endPosOfFeeds)]

或者只是将zip投射到list

list_of_tuples = list(zip(startPosOfFeeds, endPosOfFeeds))