Python เพิ่มรายการในส่วนของรายการอื่น

Sep 30 2020

นี่คือปัญหาพื้นฐาน:

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

listb ควรจะเป็น

[1, 2, 6, 8, 10, 6, 7]

แต่3, 4, 5ถูกใส่เข้าไปหลังจาก3, 4, 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, tags=(tags))
        # Get StatSize, 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,album,song:',self.lib_tree.item(artist, 'text'), \
                                   self.lib_tree.item(album, 'text'), \
                                   self.lib_tree.item(song, 'text'))
        print('adj_list:',adj_list)

adj_listมีค่าที่ถูกต้องปรากฏขึ้นในการแก้ปัญหา

ฉันจะเพิ่มรายการค่าในส่วนของรายการได้อย่างไร

คำตอบ

1 ShadowRanger Sep 30 2020 at 08:01

พฤติกรรมที่คุณต้องการไม่ใช่คุณสมบัติของ 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, 9, 11]

โปรดทราบว่าผลลัพธ์ (ทั้งสองreprและstrรูปแบบ) จะดูแตกต่างจาก Python lists เล็กน้อย แต่คุณสามารถแปลงกลับเป็น Python ธรรมดาได้listหากจำเป็น