遍历列表列表以创建列表的新列表

时间:2020-07-06 13:51:17

标签: python list for-loop

我想我知道需要做什么。但是我无法得到正确的结果。我有一个包含多个项目的列表。我想创建一个新列表(根据条件,包含更多元素),但要保留列表原始列表的长度。让我们举例说明:

test = [[2, 3, 5, 6, 9, 10, 11, 13, 14, 16, 18, 20, 23, 24, 25], [1, 4, 5, 6, 7, 9, 11, 12, 13, 15, 16, 19, 20, 23, 24]] # there are hundreds of lists in the original list
list_num_sor = []
new_list = []
for row in test:
    for i in range(1, 26):
        if i in row:
            new_list.append('1')
        else:
            new_list.append('0')
    list_num_sor.append(new_list)

我想做的是,对于测试中的每个列表,我要验证列表中的数字是否在1-25范围内,返回1,否则返回0。原始列表包含15个元素,新的应该有25个。

结果应为:

 list_num_sor = [['0', '1', '1', '0', '1', '1', '0', '0', '1', '1', '1', '0', '1', '1', '0', '1', '0', '1', '0', '1', '0', '0', '1', '1', '1'],
                ['1', '0', '0', '1', '1', '1', '1', '0', '1', '0', '1', '1', '1', '0', '1', '1', '0', '0', '1', '1', '0', '0', '1', '1', '0']]

但是我得到的是一个列表列表,其中每个元素都具有列表的第一个列表中所有项目的结果:

 [['0',  '1',  '1',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '0',  '1',  '1',  '0',  '1',  '0',  '1',  '0',  '1',  '0',  '0',  '1',  '1',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '1',  '0',  '1',  '0',  '1',  '1',  '1',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '0'],
  ['0',  '1',  '1',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '0',  '1',  '1',  '0',  '1',  '0',  '1',  '0',  '1',  '0',  '0',  '1',  '1',  '1',  '1',  '0',  '0',  '1',  '1',  '1',  '1',  '0',  '1',  '0',  '1',  '1',  '1',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '0',  '0',  '1',  '1',  '0']]

希望我可以理解它。我需要它成为列表的列表,以便以后创建DF。我认为处理时间不会成为问题,因为它不足以使其成为问题。

希望你们可以帮助我。

谢谢

1 个答案:

答案 0 :(得分:3)

因此,您希望在旧列表中的每一行都有一个新列表:

for row in test:
    new_list.append([])
    for i in range(1, 26):
        if i in row:
            new_list[-1].append('1')
        else:
            new_list[-1].append('0')

每次迭代都将一个列表添加到列表列表中,然后将0/1值附加到最后添加的列表([-1])中。更加简洁:

new_list = [[1 if i in row else 0 for i in range(1, 26)] for row in test]

这具有额外的好处,您可以将其直接放在对DataFrame构造函数的调用中。