Python:在数组中查找元素,如果找不到则执行某些操作

时间:2018-05-21 12:25:45

标签: python python-3.x

我有一系列文件已经从git中添加/删除/更改/重命名,形式为:[['已添加',file_1_path],['已更改', file_2_path]等]

我有一个我想要比较的文件路径列表。

如果列表中的文件路径与数组的文件路径相同,它应该执行某些操作。如果它不在整个数组中,但如果它在列表中而不在数组中,我应该做其他事情。有谁知道我怎么能解决这个问题?

for file_path in file_paths:
    for file_in_array in file_paths_array:
        if file_in_array[-1] == file_path :
            print('do something')
    if file_path not in file_paths_array: # I don't know what to do here and this is not correct.
        print('do something else')

2 个答案:

答案 0 :(得分:3)

file_paths_array中的文件集是:

file_set = {x[-1] for x in file_paths_array}

因此,您可以为排除的文件执行逻辑:

[...]
elif file_path not in file_set:
    print('do something else')

从你的例子:

file_set = {x[-1] for x in file_paths_array}

for file_path in file_paths:
    for file_in_array in file_paths_array:
        if file_in_array[-1] == file_path:
            print('do something')
        elif file_path not in file_set:
            print('do something else')

答案 1 :(得分:1)

该列表不是此tak的最佳结构,因为必须一次又一次地搜索。

首先将其转换为字典:

for file_path in file_paths:
    if file_path in file_path_map:
        print('do something')
    else:
        print('do something else')

然后您可以轻松访问git的数据:

for file_path in file_paths:
    try:
        info = file_path_map[file_path]
    except KeyError:
        print('do something else')
    else:
        print('do something with file_path and info')

如果您对git的数据感兴趣:

 df[, (cols.d0) := lapply(.SD, function(z) z - z[3]) , keyby=K, .SDcols=cols] 

更新:这假设可以添加或更改或删除一个文件路径,即它只在列表中出现一次。如果不是这种情况,则必须修改代码。