列出编码问题

时间:2019-08-05 10:50:16

标签: python list

我正在尝试以下代码,但现在我的教授希望对此进行一些小的更新。我有一个标签列表

[good,noise,mixed,silent]

这些值的组合构成了诸如此类的新列表。

[good,good,noise,noise,good,good,silent]

我的第一个问题是,如果前两个值也都很好,我就必须将坏或杂音转换为好。

我尝试了以下代码。现在他要求我将2作为窗口并将其作为变量传递。基本上,如果win = 3表示前面的3个值是好的,则应将噪声或混合值替换为good。

如果win = 5,则如果标签的前5个值是好的,那么当前的杂音或混合标签应该变好。

list10=['silent','good','good','good','noise','good','good','mixed','good','good','good','silent','good','mixed']

def predUpdate(new_list):
    update_list=new_list.copy()

    for a in range(len(new_list) - 2):
        if (new_list[a] == 'good' and new_list[a + 1] == 'good' and (
                new_list[a + 2] == 'mixed_noise' or new_list[a + 2] == 'noise')):
            update_list[a + 2] = 'good'
    return update_list

print (list10)
print (predUpdate(list10))

初始输出:

['silent', 'good', 'good', 'good', 'noise', 'good', 'good', 'mixed', 'good', 'good', 'good', 'silent', 'good', 'mixed']

====================

['silent', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'silent', 'good', 'mixed']

====================

这是针对窗口值2(2个好的值)的。我该如何对3或5或给定的任意随机值执行相同操作?

2 个答案:

答案 0 :(得分:2)

你在这里

list10=['silent','good','good','good','noise','good','good','mixed','good','good','good','silent','good','mixed']

def predUpdate(new_list,k):
    update_list=new_list.copy()

    for a in range(len(new_list) - k):
        if (new_list[a:a+k] == k*['good'] and new_list[a+k]!='silent'):
            update_list[a + k] = 'good'
    return update_list

print (list10)
print (predUpdate(list10,3))

答案 1 :(得分:0)

最佳方法:

  • 请注意,您已经看到0个连续的好值
  • 以空结果列表开头
  • 遍历列表
  • 如果价值很高,请注意您已经看到了一个连续的良好价值
  • 否则:
    • 如果值混合或不好,并且您至少看到了N个连续的好值,请将其更改为好
    • 然后请注意,您已经连续看到0个好值
  • 将当前值(可能已更改)添加到结果列表中

次优方式(但更接近原始解决方案):

  • 以空结果列表开头
  • 遍历起始数组(i)的索引
  • 如果我们至少是第N个元素,并且该元素混合或不正确:请查看窗口中以i-1结尾的所有元素是否都是"good"。您可以使用all函数:all(x[j] == "Good" for j in range(i - win, i))非常轻松地完成此操作。如果是这样,请将元素更改为"good"
  • 将当前值(可能已更改)添加到结果列表中