首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据压缩模型

数据压缩模型
EN

Stack Overflow用户
提问于 2016-10-12 14:04:30
回答 2查看 56关注 0票数 0

我正在做一个练习,我们将通过列表对数据压缩进行建模。假设我们得到了一个列表:[4,4,4,4,4,4,2,9,9,9,9,9,5,5,4,4]我们应该应用游程编码,并获得一个新的[4,6,2,1,9,5,5,2,4,2]列表,其中它显示了有多少4 (6) 2(1)9 (5) 5 (2),依此类推。紧跟在整数旁边。

到目前为止,我有以下代码,但是我遇到了一个语义错误,并且不确定如何修复它:

代码语言:javascript
复制
  def string_compression(List):
      newlist=[]
      counter=0
      x=0
      for elm in List:
          prev_item= List[x-1]
          current_item=List[x]
          if prev_item == current_item:
              counter+=1
          else:
              newlist+=[current_item]+[counter]
              counter=0

附言:我还是个初学者,所以如果这是一个“愚蠢”的问题,我道歉!如果能帮上忙我会很感激的。

EN

回答 2

Stack Overflow用户

发布于 2016-10-12 14:12:23

你的代码对所有这些计数器来说真的很混乱。您需要做的是按照定义的方式实现算法。您只需要一个索引i,它可以跟踪您当前所处的列表位置,并在每个步骤中将该数字与前一个数字进行比较。

  • 如果它们相等,则递增计数器
  • (如果它们不相等),然后将新的跟踪编号对与计数相加,并将计数器重置为0,并将新跟踪编号设置为当前编号。
票数 0
EN

Stack Overflow用户

发布于 2016-10-12 16:10:21

您在正确的轨道上,但是使用基于索引的循环会更容易:

代码语言:javascript
复制
def rle_encode(ls):
    # Special case: the empty list.
    if not ls:
        return []

    result = []

    # Count the first element in the list, whatever that is.
    count = 1
    # Loop from 1; we're considering the first element as counted already.
    # This is safe because we know that the list isn't empty.
    for i in range(1, len(ls)):
        if ls[i] == ls[i - 1]:
            count += 1
        else:
            # Store the last run.
            result.append(ls[i - 1])
            result.append(count)
            # Count the current number.
            count = 1
    # Add the last run since we didn't get a chance to in the loop.
    result.append(ls[-1])
    result.append(count)

    return result
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39991511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档