前言:
今天我们对“set list python”大致比较关心,朋友们都想要了解一些“set list python”的相关知识。那么小编也在网上搜集了一些对于“set list python””的相关资讯,希望看官们能喜欢,姐妹们一起来了解一下吧!今天也是遇到一点工作中的小问题,克服了这个困难之后,让我对list和set有了更深入的了解~
关于list和set的特性,可以看我往期的文章:pyhon中的数据类型
背景:
在DEEP_SORT_YOLOv3中,在检测行人的时候,除了可以记录行人的坐标,还可以记录行人的临时ID,见下图:
我要做的工作就是在每一帧中把行人的id抓出来,然后放在他的坐标信息的后面,同时把所有的id都放在一个列表里,但是列表里的id每个只能出现一次,如:
[1,2,3,4,5,6,7,8,9,…,234]
最后需要生成的样式为红框中的形式:
基于每个id只能出现一次的特性,我自然而然想到用set来实现。首先把所有帧的所有id都append到一个list里,再把这个list变成set,那每个id都只有一个啦~~哈哈,万事大吉,然而事情并没有那么简单,一颗老鼠屎坏了一锅汤的破事儿又发生了,由于我是遍历这个set中的元素,一个一个加再一个一个加逗号的,于是最后会多一个逗号~~我比较笨拙,还是用检查这个元素是不是最后一个要添加的元素的方法来解决,如果是,那就不加逗号,如果不是,那就加逗号,表达得有些乱,还是直接看代码吧:
以下代码对应上面的截图的最后一行文本写入~
input_tags_set = set(track_id) #track_id为保存了所有id的数组(存在重复id)
tmp = '"framerate":"1","inputTags":"'
f.write(tmp)
len_input_tags = len(input_tags_set)#获取数组长度
for i in range(len_input_tags):
if i == len_input_tags-1:如果当前元素是最后一个元素,就只写入元素
tmp = str(input_tags_set [i])
f.write(tmp)
else:#如果当前元素不是最后一个元素,写入元素加逗号
tmp = str(input_tags_set [i])+','
f.write(tmp)
tmp = '","suggestiontype":"track","scd":false,"visitedFrames":[],"tag_colors":["#c1ee0c"]}'
f.write(tmp)
大家看上面的代码观察到什么问题了么?
我一开始没意识到,set是不能用索引访问的,也就是说input_tags_set[i]这样的写法是错的,当时程序就直接报错:
因为list可以用索引访问,所以我就想着索性再把set变回list,不就又可以用索引访问了么?哈哈我真是太机智了~~
于是现在这段代码变成这样了:
input_tags_set = set(track_id) #obtain ids once for all
#把list变成set消除重复值,再把set变回list,用索引访问
input_tags_list = list(input_tags_set)
tmp = '"framerate":"1","inputTags":"'
f.write(tmp)
len_input_tags = len(input_tags_list)
for i in range(len_input_tags):
if i == len_input_tags-1:
tmp = str(input_tags_list[i])
f.write(tmp)
else:
tmp = str(input_tags_list[i])+','
f.write(tmp)
tmp = '","suggestiontype":"track","scd":false,"visitedFrames":[],"tag_colors":["#c1ee0c"]}'
f.write(tmp)
欢迎关注"pyhon修炼之道",我们将持续更新新鲜python相关文章~
标签: #set list python