我试图在一个文件中找到可能有或没有分隔符的分隔符,这些分隔符是什么-如果有的话-也不知道。你知道吗
到目前为止,我已经编写了以下代码,试图“解决”这个问题:
strings = [
'cabhb2k4ack_sfdfd~ffrref_lk',
'iodja_24ed~092oi3jelk_fcjcad',
'lkn04432m_90osidjlknxc~o_pf'
]
# Process first line
line1 = strings[0]
separators = set()
for sep in set(line1):
separators.add(( sep, line1.count(sep) ))
# Process all the others
for line in strings:
for sep,sepcount in separators.copy():
if line.count(sep) != sepcount: separators.remove( (sep,sepcount) )
print separators
它返回集合:set([('_', 2), ('~', 1)])
,这很好-但不幸的是,它不包含文件中分隔符的顺序。事实上,甚至不知道这些分离器的顺序是否一致。你知道吗
分隔符的规则很简单:
请注意,在上面的示例中,“4”被排除在分隔符之外,因为原因1和3在第三个字符串中出现了两次。你知道吗
问题 如何修改此代码以检查规则2是否正确打印分隔符的顺序?你知道吗
根据规则1,每个分隔符都有一个从列表的第一行到最后一行的出现次数/行数。你知道吗
我觉得规则3表达得不太好。我认为应该理解为:“在行中的其他字符中,不能找到用作分隔符的每个字符。”。你知道吗
因此,在给定规则1和规则3的情况下,每一个出现次数/行数在两个连续行之间仅变化一次的字符都不能作为分隔符。你知道吗
因此,下面代码的原理是
·首先要创建一个列表
sep_n
,列出第一行中出现的所有字符及其在第一行中出现的次数,·然后沿着
S
行列表进行迭代,并消除列表sep_n
中出现次数不相同的每个字符。你知道吗如果行中的字符有足够的变化(除了分隔符),那么代码中的
sep_n
长度会随着列表的迭代而迅速减少。你知道吗是的。你知道吗
指令
sep_n = [ (c,line0.count(c)) for c in line0]
负责在separators_in_order
中获得的最终顺序是列表S
第一行中的顺序。你知道吗但我无法想象一种方法来测试分隔符的顺序是否从一行到另一行保持不变。事实上,在我看来,在迭代过程中不可能进行这样的测试,因为只有在完全执行迭代之后,才能完全知道分隔符列表。你知道吗
这就是为什么必须在获得
sep_n
的值之后执行辅助控件的原因。它需要再次遍历列表S
。问题是,如果“出现次数/行数在两个连续行之间仅变化一次的每个字符都不能成为分隔符,则可能出现非分隔符字符在所有行中出现的次数完全相同的情况,因此不可能在该行上将其检测为非分隔符发生次数的依据。
但由于这样一个非分隔符字符在稳定出现的字符列表中不总是放在同一个位置,所以二次验证是可能的。你知道吗
最后,一个可能存在的极端情况是:一个非分隔符出现在所有行中,出现的次数完全相同,并且放置在行中的分隔符之间,这样即使通过二次验证也无法检测到它;
我不知道怎么破案。。。。你知道吗
结果是
和
结果是
.
. 你知道吗
注1
指令
line0 = S.pop(0)
完成为了避免指令
for line in S[1:]:
关闭,因为
S[1:]
创建了一个新的列表,这个列表可能很重。你知道吗是的。你知道吗
注2
为了避免在
S
中每次迭代时创建新的sep_n
列表,最好按以下方式编写迭代:
我会使用
Counter
而不是.count
,接受skrrgwasme的建议使用列表,并使用itertools.combinations
来帮助迭代可能的分隔符子集:这让我
相关问题 更多 >
编程相关推荐