我想我知道需要做什么。但是我无法得到正确的结果。我有一个包含多个项目的列表。我想创建一个新列表(根据条件,包含更多元素),但要保留列表原始列表的长度。让我们举例说明:
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。我认为处理时间不会成为问题,因为它不足以使其成为问题。
希望你们可以帮助我。
谢谢
答案 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
构造函数的调用中。