龙空技术网

「python小操作」黄金搭档:list和set

python修炼之道 205

前言:

今天我们对“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