同样在滑动窗口中平均索引位置的python3计数器

问题描述 投票:0回答:1

我有一个列表和一个字符串:

anchors=['a','b']
mystring = 'aerdsbewsabsdsasdbs'

我想遍历mystring中的每个字母,如果我“打了”一个锚,请跟踪出现在“ prior”之前2个字母和“ post”之后2个字母的字母。

所以我想要的输出将是列表列表,形式为:

[[prior letters, anchor, post letters],
prior letters, anchor, post letters]]

对于每个锚点。使用Counter()letters上的mystring可以轻松实现这一点,但是我想按平均索引位置对结果输出进行排序。因此,对于每个先前的字母,我想计算在每个锚点的2个字母内它发生的次数,并按锚点的索引位置的平均值进行排序。在我的锚点'a'的示例中,它看起来像:

prior letters = {s:(2,-1), w:(1,-2), d:(1,-2)}
anchor = 'a'
post letters = {e:(1,1), r:(1,2), b:(1,1), s:(2,1.5), d:(1,2)}

其中每个前/后字母的键值对均采用以下格式:

letter:(count,avg_index)

字母=滑动窗口2内的字母count =每个锚点在滑动窗口中字母出现的次数avg_index =字母相对于每个锚点的平均索引位置,例如(-1.5)表示字母出现在位置-1和-2处,平均值为-1.5。我正在努力完成代码,是否可以使用更好的数据结构来提供帮助?

python python-3.x data-structures counter
1个回答
1
投票

不是完整的答案,但评论范围太窄。我已经测试过此代码:

import pandas as pd

anchors=['a','b']
mystring = 'aerdsbewsabsdsasdbs'

df = pd.DataFrame(columns=['letter', 'match_anchor', '2_letters_before', '2_letters_afer'])
for letter in mystring:
    df = df.append( pd.DataFrame([[letter, letter in anchors]], columns=['letter', 'match_anchor']) )

df['2_letters_before'] = df['letter'].shift(2)
df['2_letters_afer'] = df['letter'].shift(-2)
df = df[df['match_anchor'] == True]
df = df.reset_index(drop=True)
print(df)

输出为:

  letter match_anchor 2_letters_before 2_letters_afer
0      a         True              NaN              r
1      b         True                d              w
2      a         True                w              s
3      b         True                s              d
4      a         True                d              d
5      b         True                s            NaN

重点是我不了解您的数据。根据当前的输出,我想我已经接近您的期望。但是,您能否进一步解释所需的预期输出?例如,数字(2,-1)对字母's'/ anchor'a'意味着什么?

prior letters = {s:(2,-1), w:(1,-2), d:(1,-2)}
anchor = 'a'
post letters = {e:(1,1), r:(1,2), b:(1,1), s:(2,1.5), d:(1,2)}
© www.soinside.com 2019 - 2024. All rights reserved.