我需要输入一个字符串,例如AABCAAADA并将其拆分为给定数量的字符串,例如3(但这可以是任何东西)。然后,在这些字符串中,删除重复的字符。对于给定的示例,此代码的输出应为AB,CA和AD。
我的代码为最后一个示例生成了DA,我不明白为什么会这样。
import textwrap
def splitToT(string, number):
wordsList = list(textwrap.wrap(string,number))
for word in wordsList:
t = word
makeU(t)
def makeU(t):
list1 = list(t)
list2 = list(t)
print"list1 = "
print list1
print"list2 = "
print list2
for l1e in list1:
print "element from list1"
print l1e
count = 0
print"COUNT RESET"
for l2e in list2:
print "\t Element in list2"
print("\t" + l2e)
if str(l1e) == str(l2e):
count = count+1
print count
if count >= 2:
print("removing element")
print l2e
list2.remove(l2e)
print"\tlist 2 is now"
print list2
print "LIST2 IS:"
print list2
print("-----")
def main():
n = 3
S = 'AABCAAADA'
splitToT(S, n)
if __name__ == "__main__":
main()
答案 0 :(得分:0)
您可以将字符串视为列表,然后将切片重构为集合,如下所示:
s = list("AABCAAADA")
def slicer(s, slices):
data = []
for x in slices:
# slices is a list of tuples, where x[0]
# is the starting slice and x[1] is the end
data.append(set(s[x[0]:x[1]]))
return data
slicer(s, [(0, 3), (3, 6), (6, 9)])
要保留字符串的顺序,我认为您必须迭代切片,并且仅弹出一次新的唯一值。但否则我认为方法会相同
答案 1 :(得分:0)
您的程序删除了第一组元素。
AABCAAADA
分解为
aab
caa
ada
然后计算在列表中找到了多少个元素,如果发现两个或更多,则将其删除。
因此aab
取a
并将其计数为大于2的数字,因此它将第一个a
删除。
在第二次迭代中,它具有ab
,并且它再次计数a
,但是只有一个a
,因此可以通过。
第三次迭代计数为b
,并且由于只有一次,因此将其添加到列表中。
我将要删除的字母大写
Aab
cAa
Ada
最后一个看起来不对,但这是因为算法的设计方式,最后一个字母留在那里。
答案 2 :(得分:0)
下面是可以帮助您的东西
import textwrap
s='ababbcdfgfhh'
n=3 #or anything, you can take as input
lst=[]
x=0
lst=list(textwrap.wrap(s, n))
print(lst)
for x in lst:
print(''.join(sorted(set(x), key=x.index))) # removing the duplicates by using 'set'
它将产生如下输出:
['aba', 'bbc', 'dfg', 'fhh']
ab
bc
dfg
fh
打印输出的第一行以检查lst