Python 我无法从random.shuffle方法捕获索引

Python 我无法从random.shuffle方法捕获索引,python,numpy,scipy,Python,Numpy,Scipy,我无法从random.shuffle方法捕获索引。 发生了一个错误 TypeError: %d format: a number is required, not list 我的代码是 if __name__ =="__main__": bell_nums = range(1,6) pairs = list(itertools.combinations(bell_nums,2)) for pair in pairs: bell_num1=int(pai

我无法从random.shuffle方法捕获索引。 发生了一个错误

TypeError: %d format: a number is required, not list
我的代码是

if __name__ =="__main__":
    bell_nums = range(1,6)
    pairs = list(itertools.combinations(bell_nums,2))

    for pair in pairs:
        bell_num1=int(pair[0])
        bell_num2 = int(pair[1])
        train_data = np.empty((0,12),float)
        train_label = np.array([])
        test_data = np.empty((0,12),float)
        test_label = np.array([])
        noise_nums = list(range(1,12))
        level_nums = list(range(0,10))
        random.shuffle(noise_nums)

        nfft=2048 
        nceps = 12 

        for noise_nums_index in noise_nums[0:10]:
            random.shuffle(level_nums)
            files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,level_nums))
            for file_name in files_name:
                feature = get_feature(files_name,nfft,nceps)
                if len(train_data) ==0:
                    train_data=feature
                else:
                    train_data=np.vstack((train_data,feature))
                train_label=np.append(train_label,bell_num1)
            files_name="learning_sample/%d_%d_%d.wav"% (bell_num1,noise_num,level_nums[8])
            feature = get_feature(file_name,nfft,nceps)
            if len(test_data) ==0:
                test_data=feature
            else:
                test_data=np.vstack((test_data,feature))
            test_label=np.append(test_label,bell_num1)
我认为level_nums是列表类型的,所以发生了这个错误。 但在这种情况下,我想不出从random.shuffle方法捕获索引的方法。 我想使用noise\u nums\u索引的编号和level\u nums的编号随机命名learning\u sample/%d\u%d.wav此文件。在这种情况下,如何命名此部分?如何编写此文件?是否应使用for语句进行random.shufflelevel\u nums?

您可以使用标准python库中的方法

例如:

random.randrange(1, 12, 1)
或方法:


要在级别\u nums中选择随机元素,应使用:random.choicelevel\u nums

在代码中:

for noise_nums_index in noise_nums[0:10]:
    files_name = glob.glob("learning_sample/%d_%d_%d.wav" % (bell_num1,noise_nums_index,random.choice(level_nums)))
请注意,由于您提供的代码中没有定义noise_nums,因此我无法检查完整的代码。可能还有其他错误。

级别\u nums是一个列表,您将其指向%d格式字符串

如果您只是在寻找一个随机整数,并且因为您已经在使用numpy,您是否考虑过使用np.random.choice?这样就不需要使用shuffle方法了

>>> np.random.choice(level_nums)
3
>>> np.random.choice(level_nums)
8
或者只使用随机整数函数,完全去掉级别

>>> np.random.randint(1, 11)
6
>>> np.random.randint(1, 11)
6