首页 > 解决方案 > 在python中使用类内的字符串数组

问题描述

嗨,我是 Python 新手,在课堂上使用数组时遇到问题。使用字符串数组时,当我用字符串更新其中一个数组时 - 所有其他数组条目都获得相同的值。您的友好指导将不胜感激。我在工作代码下方显示 - 不使用数组,然后使用数组相同(这是不工作的)。

#Working Code:

class sessionData:
    num_threads = 0
    session_id = []
    audio_check_audio_1 = []
    audio_check_audio_2 = []
    audio_check_audio_3 = []


    def __init__(self, id, f1, f2):
        self.id = id


#in main function later on:

      if (session_id not in sessionData.session_id):
            sessionData.audio_check_audio_1.append(wav_file_name1)
            sessionData.audio_check_audio_2.append(wav_file_name1)
            sessionData.audio_check_audio_3.append(wav_file_name1)
            sessionData.session_id.append(session_id)

       else:

            i = sessionData.session_id.index(session_id)

            if (recording_number == '1'):
                sessionData.audio_check_audio_1[i] = wav_file_name1
            elif (recording_number == '2'):
                sessionData.audio_check_audio_2[i] = wav_file_name2
            else:
                sessionData.audio_check_audio_3[i] = wav_file_name3

#Not working code:

class sessionData:
    num_threads = 0
    session_id = []
    audio_check_audio = [[]*3]


    def __init__(self, id, f1, f2):
        self.id = id


#in main function later on:

    if (session_id not in sessionData.session_id):

        sessionData.session_id.append(session_id)
        sessionData.audio_check_audio.append([wav_file_name[0],'',''])

    else:

         i = sessionData.session_id.index(session_id)

         for x in range 3:

             sessionData.audio_check_audio[i][x] = reg_wav_file[x]

标签: pythonarraysclass

解决方案


当您使用这样的乘法创建列表时:

audio_check_audio = [[]*3]

这三个子列表实际上是对同一个列表对象的三个相同引用,更新其中一个将更新所有子列表。

为了解决这个问题,不要使用乘法:

audio_check_audio = [[],[],[]]

有关更多详细信息,请参阅此问题


推荐阅读