Python循环遍历长列表以匹配字符串并连接

时间:2016-07-14 11:34:40

标签: python string list concatenation match

我试图遍历一个列表,以便找到除最终字符之外匹配的文件名,并将匹配连接成一个字符串。

我遇到的困难是每个文件名有不同数量的匹配,因此可能有一个没有匹配的文件,一个有两个匹配的文件,三个或四个。

我正在使用' skip'变量,以尝试并遍历已经匹配的循环的迭代,以避免重复。

我认为这个问题来自于我使用' i'可能从列表中获取元素的变量,但我不确定。

你可能会说我不熟悉Python和编程,并且在我的逻辑中有一个严重的缺陷,我无法看到!如果有什么不清楚,我会尽我所能解释,任何帮助将不胜感激。

reader = [34113751IHF.jpg, 34113751IHR.jpg, 34136676OTD.jpg, 34136676OTF.jpg, jpg34136676OTR.jpg, 34136676OTF.jpg, 34136676OTR.jpg, 34139933EDD.jpg, 34139933EDF.jpg, 34144626KXF.jpg, 34144626KXR.jpg]

iterable = iter(reader)

skip = 0

for i, j in enumerate(iterable):

    firstURL = str(j)[2:-2]
    firstShorter = str(reader[i+1])[2:-3]
    secondURL = str(reader[i+1])[2:-2]
    secondShorter = str(reader[i+1])[2:-3]

    if firstShorter == secondShorter:
        toWrite = firstURL + ".jpg|" + secondURL + ".jpg"
        thirdURL = str(reader[i+2])[2:-2]
        thirdShorter = str(reader[i+2])[2:-3]
        skip = 2

        if secondShorter == thirdShorter:
            toWrite += "|" + thirdURL + ".jpg"
            fourthURL = str(reader[i+3])[2:-2]
            fourthShorter = str(reader[i+3])[2:-3]
            skip = 3

            if thirdShorter == fourthShorter:
                toWrite += "|" + thirdURL + ".jpg"
                fifthURL = str(reader[i+4])[2:-2]
                fifthShorter = str(reader[i+4])[2:-3]
                skip = 4

    else:
        toWrite = firstURL + ".jpg"
        skip = 1

    [iterable.__next__() for x in range(skip)]

1 个答案:

答案 0 :(得分:2)

如果我理解正确你想要一个组所有匹配的文件名(除了最后一个字符和'.jpg')成为一个串联的所有文件名的字符串?以下是如何执行此操作的示例:

from collections import Counter

# The list you provided
reader = ['34113751IHF.jpg', '34113751IHR.jpg', '34136676OTD.jpg', '34136676OTF.jpg', '34136676OTR.jpg',
          '34136676OTF.jpg', '34136676OTR.jpg', '34139933EDD.jpg', '34139933EDF.jpg', '34144626KXF.jpg',
          '34144626KXR.jpg']

# Creating a copy of the list but without the last character and '.jpg'
check_list = [x[:-5] for x in reader]

counter = Counter(check_list)
grouped_list = [[k]*v for k, v in counter.items()]

这将创建符合条件的所有文件名列表。如果您想要该列表的字符串表示,您可以这样做:

string_rep = " | ".join(["".join(element) for element in grouped_list])
print(string_rep)
OUTPUT: 34113751IH34113751IH | 34144626KX34144626KX | 34139933ED34139933ED | 34136676OT34136676OT34136676OT34136676OT34136676OT