如果长度超过某个值,则从列表列表中删除一个元素
Remove an element from a list of lists if the length is longer than a certain value
这应该是一个容易解决的问题。我正在尝试遍历我的嵌套列表并删除任何低于特定长度的列表。
for i in connections:
if(len(i) >= 3):
continue
else:
connections.remove(i)
这是嵌套列表:
[[55, 35, 19, 1], [2, 78], [3, 78], [6, 78], [], [], [8, 7, 78], [9, 78], [9, 78], [10, 78], [12, 11, 78], [13, 78], [13, 78], [14, 78], [16, 15, 78], [17, 78], [18, 78], [75, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [24, 78], [25, 78], [26, 78], [29, 28, 78], [], [30, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [34, 78], [76, 78], [36, 78], [39, 38, 78], [], [40, 78], [40, 78], [41, 78], [43, 42, 78], [44, 78], [44, 78], [46, 45, 78], [47, 78], [47, 78], [48, 78], [50, 49, 78], [51, 78], [51, 78], [53, 52, 78], [54, 78], [54, 78], [77, 78], [56, 78], [59, 58, 57, 78], [60, 78], [60, 78], [60, 78], [61, 78], [63, 78], [], [64, 78], [66, 65, 78], [67, 78], [67, 78], [69, 68, 78], [70, 78], [70, 78], [72, 71, 78], [73, 78], [73, 78], [74, 78], [78], [78], [78], [78], []]
上面的代码让我明白了:
[[55, 35, 19, 1], [3, 78], [8, 7, 78], [9, 78], [12, 11, 78], [13, 78], [16, 15, 78], [18, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [26, 78], [29, 28, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [36, 78], [39, 38, 78], [], [40, 78], [41, 78], [43, 42, 78], [44, 78], [46, 45, 78], [47, 78], [50, 49, 78], [51, 78], [53, 52, 78], [54, 78], [56, 78], [59, 58, 57, 78], [60, 78], [61, 78], [], [66, 65, 78], [67, 78], [69, 68, 78], [70, 78], [72, 71, 78], [73, 78], [78], [78], []]
它确实捕获了其中的一些,但是您可以看到其中仍然有少于 3 个元素的元素。我真的被这个难住了。
试试
new_list=[x for x in connections if len(x)>=3]
在循环中从列表中删除项目的问题是,每次删除项目时索引都会更改,这意味着循环将跳过一堆项目。
对于 NumPy 数组,您可以使用布尔值列表来过滤掉项目。只剩下 'True' 个索引,所以使用 for 循环收集布尔值并将其应用于原始列表以过滤掉不需要的项目看起来像这样:
import numpy as np
lists = [[55, 35, 19, 1], [2, 78], [3, 78], [6, 78], [], [], [8, 7, 78], [9, 78], [9, 78], [10, 78], [12, 11, 78], [13, 78], [13, 78], [14, 78], [16, 15, 78], [17, 78], [18, 78], [75, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [24, 78], [25, 78], [26, 78], [29, 28, 78], [], [30, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [34, 78], [76, 78], [36, 78], [39, 38, 78], [], [40, 78], [40, 78], [41, 78], [43, 42, 78], [44, 78], [44, 78], [46, 45, 78], [47, 78], [47, 78], [48, 78], [50, 49, 78], [51, 78], [51, 78], [53, 52, 78], [54, 78], [54, 78], [77, 78], [56, 78], [59, 58, 57, 78], [60, 78], [60, 78], [60, 78], [61, 78], [63, 78], [], [64, 78], [66, 65, 78], [67, 78], [67, 78], [69, 68, 78], [70, 78], [70, 78], [72, 71, 78], [73, 78], [73, 78], [74, 78], [78], [78], [78], [78], []]
np_lists = np.array(lists)
filt = []
for i in range(0,len(lists)):
filt_i = len(np_lists[i]) >= 3
filt.append(filt_i)
print(filt)
new_list = list(np_lists[filt])
print("\n", new_list)
输出:
[True, False, False, False, False, False, True, False, False, False, True, False, False, False, True, False, False, False, False, True, True, True, False, False, False, False, True, False, False, False, False, True, False, False, False, False, True, False, False, False, False, True, False, False, True, False, False, False, True, False, False, True, False, False, False, False, True, False, False, False, False, False, False, False, True, False, False, True, False, False, True, False, False, False, False, False, False, False, False]
[[55, 35, 19, 1], [8, 7, 78], [12, 11, 78], [16, 15, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [29, 28, 78], [33, 32, 78], [39, 38, 78], [43, 42, 78], [46, 45, 78], [50, 49, 78], [53, 52, 78], [59, 58, 57, 78], [66, 65, 78], [69, 68, 78], [72, 71, 78]]
问题有点模棱两可,关于我们是要排除长度小于 3 还是小于等于 3 的列表,但这里有一个解决方案:
print([x for x in connections if len(x) > 3])
这应该是一个容易解决的问题。我正在尝试遍历我的嵌套列表并删除任何低于特定长度的列表。
for i in connections:
if(len(i) >= 3):
continue
else:
connections.remove(i)
这是嵌套列表:
[[55, 35, 19, 1], [2, 78], [3, 78], [6, 78], [], [], [8, 7, 78], [9, 78], [9, 78], [10, 78], [12, 11, 78], [13, 78], [13, 78], [14, 78], [16, 15, 78], [17, 78], [18, 78], [75, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [24, 78], [25, 78], [26, 78], [29, 28, 78], [], [30, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [34, 78], [76, 78], [36, 78], [39, 38, 78], [], [40, 78], [40, 78], [41, 78], [43, 42, 78], [44, 78], [44, 78], [46, 45, 78], [47, 78], [47, 78], [48, 78], [50, 49, 78], [51, 78], [51, 78], [53, 52, 78], [54, 78], [54, 78], [77, 78], [56, 78], [59, 58, 57, 78], [60, 78], [60, 78], [60, 78], [61, 78], [63, 78], [], [64, 78], [66, 65, 78], [67, 78], [67, 78], [69, 68, 78], [70, 78], [70, 78], [72, 71, 78], [73, 78], [73, 78], [74, 78], [78], [78], [78], [78], []]
上面的代码让我明白了:
[[55, 35, 19, 1], [3, 78], [8, 7, 78], [9, 78], [12, 11, 78], [13, 78], [16, 15, 78], [18, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [26, 78], [29, 28, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [36, 78], [39, 38, 78], [], [40, 78], [41, 78], [43, 42, 78], [44, 78], [46, 45, 78], [47, 78], [50, 49, 78], [51, 78], [53, 52, 78], [54, 78], [56, 78], [59, 58, 57, 78], [60, 78], [61, 78], [], [66, 65, 78], [67, 78], [69, 68, 78], [70, 78], [72, 71, 78], [73, 78], [78], [78], []]
它确实捕获了其中的一些,但是您可以看到其中仍然有少于 3 个元素的元素。我真的被这个难住了。
试试
new_list=[x for x in connections if len(x)>=3]
在循环中从列表中删除项目的问题是,每次删除项目时索引都会更改,这意味着循环将跳过一堆项目。
对于 NumPy 数组,您可以使用布尔值列表来过滤掉项目。只剩下 'True' 个索引,所以使用 for 循环收集布尔值并将其应用于原始列表以过滤掉不需要的项目看起来像这样:
import numpy as np
lists = [[55, 35, 19, 1], [2, 78], [3, 78], [6, 78], [], [], [8, 7, 78], [9, 78], [9, 78], [10, 78], [12, 11, 78], [13, 78], [13, 78], [14, 78], [16, 15, 78], [17, 78], [18, 78], [75, 78], [75, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [24, 78], [24, 78], [25, 78], [26, 78], [29, 28, 78], [], [30, 78], [30, 78], [31, 78], [33, 32, 78], [34, 78], [34, 78], [76, 78], [36, 78], [39, 38, 78], [], [40, 78], [40, 78], [41, 78], [43, 42, 78], [44, 78], [44, 78], [46, 45, 78], [47, 78], [47, 78], [48, 78], [50, 49, 78], [51, 78], [51, 78], [53, 52, 78], [54, 78], [54, 78], [77, 78], [56, 78], [59, 58, 57, 78], [60, 78], [60, 78], [60, 78], [61, 78], [63, 78], [], [64, 78], [66, 65, 78], [67, 78], [67, 78], [69, 68, 78], [70, 78], [70, 78], [72, 71, 78], [73, 78], [73, 78], [74, 78], [78], [78], [78], [78], []]
np_lists = np.array(lists)
filt = []
for i in range(0,len(lists)):
filt_i = len(np_lists[i]) >= 3
filt.append(filt_i)
print(filt)
new_list = list(np_lists[filt])
print("\n", new_list)
输出:
[True, False, False, False, False, False, True, False, False, False, True, False, False, False, True, False, False, False, False, True, True, True, False, False, False, False, True, False, False, False, False, True, False, False, False, False, True, False, False, False, False, True, False, False, True, False, False, False, True, False, False, True, False, False, False, False, True, False, False, False, False, False, False, False, True, False, False, True, False, False, True, False, False, False, False, False, False, False, False]
[[55, 35, 19, 1], [8, 7, 78], [12, 11, 78], [16, 15, 78], [21, 20, 78], [23, 22, 78], [23, 22, 78], [29, 28, 78], [33, 32, 78], [39, 38, 78], [43, 42, 78], [46, 45, 78], [50, 49, 78], [53, 52, 78], [59, 58, 57, 78], [66, 65, 78], [69, 68, 78], [72, 71, 78]]
问题有点模棱两可,关于我们是要排除长度小于 3 还是小于等于 3 的列表,但这里有一个解决方案:
print([x for x in connections if len(x) > 3])