列出Python中的迭代

时间:2018-10-29 17:32:26

标签: python

我需要输入一个字符串,例如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()

3 个答案:

答案 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

然后计算在列表中找到了多少个元素,如果发现两个或更多,则将其删除。

因此aaba并将其计数为大于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