【python小操作】黄金搭档:list和set

今天也是遇到一点工作中的小问题,克服了这个困难之后,让我对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)

大家看上面的代码观察到什么问题了么?

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1541081731150&di=8f481b28cecd2f98179871fcd1da32a8&imgtype=0&src=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20171216%2Fb795bc746b114715bf64932e09efd420.jpeg

我一开始没意识到,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相关文章~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值