Python将列表添加到另一个列表的一部分

问题描述

这是基本问题:

>>> listb = [ 1,2,3,4,5,6,7 ]
>>> slicea = slice(2,5)
>>> listb[slicea]
[3,5]
>>> lista = listb[slicea]
>>> lista
[3,5]
>>> listb[slicea] += lista
>>> listb
[1,7]

listb应该

[1,8,10,7]

但是在未添加3,5之后插入了3,5


tl; dr

我的这段代码不起作用:

    self.lib_tree.item(song)['values'][select_values] = adj_list
    self.lib_tree.item(album)['values'][select_values] += adj_list
    self.lib_tree.item(artist)['values'][select_values] += adj_list

完整的代码是这样的:

def toggle_select(self,song,album,artist):

    # 'values' 0=Access,1=Size,2=Selected Size,3=StatTime,4=StatSize,#          5=Count,6=Seconds,7=SelSize,8=SelCount,9=SelSeconds
    # Set slice to StatSize,Count,Seconds
    total_values = slice(4,7)       # start at index,stop before index
    select_values = slice(7,10)     # start at index,stop before index

    tags = self.lib_tree.item(song)['tags']
    if "songsel" in tags:
        # We will toggle off and subtract from selected parent totals
        tags.remove("songsel")
        self.lib_tree.item(song,tags=(tags))
        # Get StatSize,Count and Seconds
        adj_list = [element * -1 for element in \
                    self.lib_tree.item(song)['values'][total_values]]
    else:    
        tags.append("songsel")
        self.lib_tree.item(song,Count and Seconds
        adj_list = self.lib_tree.item(song)['values'][total_values]  # 1 past

    self.lib_tree.item(song)['values'][select_values] = adj_list
    self.lib_tree.item(album)['values'][select_values] += adj_list
    self.lib_tree.item(artist)['values'][select_values] += adj_list
    if self.debug_toggle < 10:
        self.debug_toggle += 1
        print('artist,song:',self.lib_tree.item(artist,'text'),\
                                   self.lib_tree.item(album,\
                                   self.lib_tree.item(song,'text'))
        print('adj_list:',adj_list)

adj_list具有在调试中显示的正确值。

如何将值列表添加到列表的切片中?

解决方法

您想要的行为不是任何Python内置类型的功能;具有内置序列的+意味着级联,而不是逐元素加法。但是numpy数组可以满足您的需求,因此建议您研究numpy。简单的例子:

>>> import numpy as np
>>> a = np.array([2,3,4],dtype=np.int64)
>>> b = np.array([5,6,7],dtype=np.int64)
>>> a += b
>>> a
array([ 7,9,11])
>>> print(a)
[ 7  9 11]
>>> print(a.tolist())
[7,11]

请注意,输出(reprstr形式)看起来与Python list有点不同,但是如果满足以下条件,则可以转换回普通的Python list需要。