你的问题有几种理解的方式,我不确定你要怎么做,所以我都写给你。纯手工写的,所以不能像机器人那样不费力地打字,数据我抄了4组作为示意。你把完整的数据文本贴出来我可以帮你再改。
一个是单纯把元素删除
arr = [['2','一般','一般','一般'],['75', '85', '50', '85'], ['77', '70', '70', '80'], ['75', '85', '80', '85']]
new_arr = [[int(num) for num in inner_arr if num.isdigit()] for inner_arr in arr]
print(new_arr)
结果是 [[2], [75, 85, 50, 85], [77, 70, 70, 80], [75, 85, 80, 85]]
一个是把存在非法成绩格式的整个列表都删除
arr = [['2','一般','一般','一般'],['75', '85', '50', '85'], ['77', '70', '70', '80'], ['75', '85', '80', '85']]
new_arr = list(filter(lambda inner_arr: all(num.isdigit() for num in inner_arr), arr))
print(new_arr)
结果是 [['75', '85', '50', '85'], ['77', '70', '70', '80'], ['75', '85', '80', '85']]
一个是,将这些非法变量,转换为某个特殊值,比如说 '0'
arr = [['2','一般','一般','一般'],['75', '85', '50', '85'], ['77', '70', '70', '80'], ['75', '85', '80', '85']]
new_arr = [[int(num) if num.isdigit() else '0' for num in inner_arr] for inner_arr in arr]
print(new_arr)
结果是 [['2', '0', '0', '0'], [75, 85, 50, 85], [77, 70, 70, 80], [75, 85, 80, 85]]
可以遍历数组,找出非法成绩并删除。
示例代码:
# li是成绩二维数组,这里省略声明和初始化
for i in range(0,len(li)):
for j in range(0,len(li):
if not isdigit(li[i][j]):
del li[i][j]
你二维列表数据能不能发一下
可以使用嵌套的循环遍历每个二维列表中的元素,然后使用条件语句来判断是否为合法成绩,如果不是则将其删除。
以下是一种示例代码:
# 假设这是一个含有非法成绩的二维列表
scores = [["张三", 95], ["李四", "一般"], ["王五", 88], ["赵六", "80分"]]
# 遍历每个元素
for item in scores:
# 如果成绩不是数字类型,则将其删除
if not isinstance(item[1], (int, float)):
scores.remove(item)
# 输出处理后的结果
print(scores)
输出结果应该是:
[['张三', 95], ['王五', 88]]
注意在遍历列表时,我们不能直接删除其中的元素,因为这会导致列表的长度发生改变,影响到循环的结果。因此可以先标记需要删除的元素,最后再一次性地进行删除。当然,也可以使用列表解析来简化代码。
在Python中,你可以使用列表推导式(list comprehension)和嵌套循环来实现这个目标。以下是一个示例,展示如何从二维列表中去除非法成绩(如"一般"):
# 示例二维列表,其中包含一些非法成绩
scores = [
[90, 80, "一般", 95],
[85, "一般", 70, 60],
["一般", 88, 92, 78]
]
# 使用列表推导式和嵌套循环过滤非法成绩
filtered_scores = [[score for score in person_scores if isinstance(score, (int, float))] for person_scores in scores]
print(filtered_scores)
运行上述代码,你将得到一个新的二维列表filtered_scores
,其中已经去除了非法成绩(如"一般"):
[
[90, 80, 95],
[85, 70, 60],
[88, 92, 78]
]
在这个例子中,我们使用isinstance(score, (int, float))
来检查score
是否为整数或浮点数。如果score
是整数或浮点数,我们就保留它;否则,我们将其过滤掉。这样,我们就得到了一个去除非法成绩的新二维列表。
你可以通过编写一个函数来去除二维列表中的非法成绩。这里有一个示例代码,可以帮助你解决这个问题:
def remove_invalid_scores(scores_list):
# 使用列表推导式遍历嵌套列表中的每个成绩
# 只保留那些可以转换为浮点数的成绩
cleaned_scores_list = [
[score for score in sublist if is_valid_score(score)] for sublist in scores_list
]
return cleaned_scores_list
def is_valid_score(score):
try:
float(score)
return True
except ValueError:
return False
# 示例输入
scores_list = [
[90, "一般", 85, "优秀", 60],
[78, "不及格", 89, 72, 68],
["良好", 82, 88, "及格", 76],
]
# 清理后的二维列表
cleaned_scores_list = remove_invalid_scores(scores_list)
print(cleaned_scores_list)
这个代码中定义了两个函数:remove_invalid_scores
和 is_valid_score
。remove_invalid_scores
函数使用列表推导式来遍历嵌套列表中的每个成绩,并调用 is_valid_score
函数来检查这些成绩是否有效。如果成绩可以转换为浮点数,那么它被认为是有效的,否则被认为是无效的。最后,将清理后的成绩列表返回。
示例输入是一个包含数字和非法字符串的二维列表。在运行代码之后,cleaned_scores_list
变量将包含一个已删除非法成绩的二维列表。在前面的代码示例中,就可以成功地去除了二维列表中的非法成绩。
希望这次的回答能够解答你的疑问。如有其他问题,请随时提问。若无问题望采纳