比较来自不同列表的两个元组

时间:2013-05-17 14:51:03

标签: python list tuples

我有这个基本代码,我只想将第一个列表(list1)中的每个元组与第二个列表中的相应元组(列表2)进行比较。如果列表2中的元组= = list1中相应的元组减去'.vbproj',则取两个元组并返回它们。

然后我需要打印路径+ list2中的元组+ list1中的元组。我只是坚持如何做到这一点。

path = "C:\Users\bg\Documents\Brent"

list1 = [ 'Brent.vbproj', 'Chris.vbproj', 'Nate.vbproj']
list2 = ['Brent', 'Chris', 'Nate']

def connect(list1, list2):

    for x, y in zip(string[0], string2[0]):
        if string(x) is string2(y):
            print x
            os.path.join(path, x, y)




x = connect(list1, list2)
y = connect(list1, list2)

我认为zip()比较了两个元组到最小等价但我可能错了?我不知道,任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:1)

使用==测试是否相等。 is测试身份,双方是同一个对象。此外,您的输入stringstring2不是函数,因此您无法调用它们。只需直接比较xy

if x == y:

请注意,当您致电return时,函数将结束。下一行的print语句将被忽略,for循环也会结束。

最后但同样重要的是,您只是压缩stringstring2第一个元素。我怀疑你想用list1list2打电话给你,此时你可能想先配对'Brent.vbproj''Brent',然后配对'Chris.vbproj'和{ {1}}等。如果是这样,只需传递列表而不编制索引

'Chris'

我怀疑你会达到你想要的效果; for x, y in zip(string, string2): list1中的任何值对都不会相等。

也许您想查看str.startswith() method?此外,如果您正在操作和测试文件名和路径,os.path library具有您希望熟悉的功能。对于您在此处尝试的认为os.path.join()os.path.splitext()os.path.commonprefix()函数应该特别感兴趣。

请注意,您的list2变量也需要调整。使用原始字符串,正斜杠或双斜杠:

path

因为path = r"C:\Users\bg\Documents\Brent" path = "C:\\Users\\bg\\Documents\\Brent" path = "C:/Users/bg/Documents/Brent" 是退格的转义码。

答案 1 :(得分:1)

您尚未定义stringstring2 !!无论如何我从你的问题文本中理解你的问题!!

list1中的元组与list2中的 对应的 元组进行比较,我自己作为初学者将以另一种方式进行此操作。< / p>

>>> path = r"C:\Users\bg\Documents\Brent"
>>> list1 = [ 'Brent.vbproj', 'Chris.vbproj', 'Nate.vbproj']
>>> list2 = ['Brent', 'Chris', 'Nate']
>>> for i in range(0, len(list1)):
    if i < len(list2):
        if list2[i][:] == list1[i][:len(list2[i])]:
            print(path + list2[i] + list1[i]) #Print syntax is for python 3


C:\Users\bg\Documents\BrentBrentBrent.vbproj
C:\Users\bg\Documents\BrentChrisChris.vbproj
C:\Users\bg\Documents\BrentNateNate.vbproj
>>>