Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何删除不在所有其他列表中的项目_Python 3.x - Fatal编程技术网

Python 3.x 如何删除不在所有其他列表中的项目

Python 3.x 如何删除不在所有其他列表中的项目,python-3.x,Python 3.x,在python 3中: 我有一些清单。一组列表是时间戳,另一组是对应于该时间的度量。我有五批这样的。让我们调用列表:Time1,Time2,Time3,Time4,Time5和M1,M2,M3,M4,M5。这些列表应该是相同的大小,但不幸的是它们不是。我想循环遍历所有列表,确保每个时间都在每个列表中,如果不是,则从列表中删除该时间戳,并删除相应的度量值。因此,我最终得到的结果是所有列表的长度都不相等,并且Time1-5中的时间戳都完全相同 做这件事的最简单、最快捷的方法是什么 例如: 原始时间戳

在python 3中:

我有一些清单。一组列表是时间戳,另一组是对应于该时间的度量。我有五批这样的。让我们调用列表:Time1,Time2,Time3,Time4,Time5和M1,M2,M3,M4,M5。这些列表应该是相同的大小,但不幸的是它们不是。我想循环遍历所有列表,确保每个时间都在每个列表中,如果不是,则从列表中删除该时间戳,并删除相应的度量值。因此,我最终得到的结果是所有列表的长度都不相等,并且Time1-5中的时间戳都完全相同

做这件事的最简单、最快捷的方法是什么

例如:

原始时间戳和相应的测量值:

时间1=[1,2,3,4,5,6]和M1=[5,6,7,8,9,10]

时间2=[1,2,3,4,5,6,7]和M2=[6,11,8,9,10,4,7]

时间3=[1,2,4,5,6]和M3=[6,18,91,10,7]

时间4=[1,2,3,4,5,6]和M4=[50,16,72,18,9,10]

Time5=[1,2,3,4,5,6]和M5=[24,32,11,2,9,1]

处理后:

时间1=[1,2,4,5,6]和M1=[5,6,8,9,10]

时间2=[1,2,4,5,6]和M2=[6,11,9,10,4]

时间3=[1,2,4,5,6]和M3=[6,18,91,10,7]

时间4=[1,2,4,5,6]和M4=[50,16,18,9,10]


Time5=[1,2,4,5,6]和M5=[24,32,2,9,1]

我假设定义了time1,…,Time5,M1,…,M5

我相信这不是最快的方法,但它是有效的:

times = [time1, time2, time3, time4, time5]
Ms = [M1, M2, M3, M4, M5]

def intersection(l):
    l = [set(item) for item in l]
    return set.intersection(*l)

def func():
    if len(times) != len(Ms):
        print("!!! List numbers are not same !!!")
        return None

    time_intersection = intersection(times)

    for i, time in enumerate(times):
        for j, time_stamp in enumerate(time):
            if time_stamp not in time_intersection:
                Ms[i][j] = -1
        #Update
        Ms[i] = [x for x in Ms[i] if x != -1]       
        times[i] = list(time_intersection)  

func()  
print("times:\t" + str(times))
print("Ms:\t" + str(Ms))
输出:

times:  [[1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6]]
Ms:     [[5, 6, 8, 9, 10], [6, 11, 9, 10, 4], [6, 18, 91, 10, 7], [50, 16, 18, 9, 10], [24, 32, 2, 9, 1]]

时间
Ms
列表将更新。时间1、…、时间5、M1、…、M5未更新。您可以安排它们。

我假设定义了时间1、…、时间5、M1、…、M5

我相信这不是最快的方法,但它是有效的:

times = [time1, time2, time3, time4, time5]
Ms = [M1, M2, M3, M4, M5]

def intersection(l):
    l = [set(item) for item in l]
    return set.intersection(*l)

def func():
    if len(times) != len(Ms):
        print("!!! List numbers are not same !!!")
        return None

    time_intersection = intersection(times)

    for i, time in enumerate(times):
        for j, time_stamp in enumerate(time):
            if time_stamp not in time_intersection:
                Ms[i][j] = -1
        #Update
        Ms[i] = [x for x in Ms[i] if x != -1]       
        times[i] = list(time_intersection)  

func()  
print("times:\t" + str(times))
print("Ms:\t" + str(Ms))
输出:

times:  [[1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6], [1, 2, 4, 5, 6]]
Ms:     [[5, 6, 8, 9, 10], [6, 11, 9, 10, 4], [6, 18, 91, 10, 7], [50, 16, 18, 9, 10], [24, 32, 2, 9, 1]]

时间
Ms
列表将更新。时间1、…、时间5、M1、…、M5未更新。您可以安排它们。

您可以这样做:

Times = [Time1, Time2, Time3, Time4, Time5]
WantedTime = list(set(Time1).intersection(*Times[1:]))
def TimeToM(Time,M):
    idx = [i for i, x in enumerate(Time) if x in WantedTime]
    return [y for i, y in enumerate(M) if i in idx]
M1 = TimeToM(Time1, M1)
...
Time1, Time2, Time3, Time4, Time5 = [WantedTime for _ in range(len(Times)]

您可以这样做:

Times = [Time1, Time2, Time3, Time4, Time5]
WantedTime = list(set(Time1).intersection(*Times[1:]))
def TimeToM(Time,M):
    idx = [i for i, x in enumerate(Time) if x in WantedTime]
    return [y for i, y in enumerate(M) if i in idx]
M1 = TimeToM(Time1, M1)
...
Time1, Time2, Time3, Time4, Time5 = [WantedTime for _ in range(len(Times)]
  • 如果您更改
    print
    语句,它也适用于2.7+
  • 删除最后一条打印语句,您将得到您想要的内容
  • 如果有更多变量
    Time,M
  • 如果有更多变量,请更改范围
  • 更少的代码
代码: 输出:
  • 如果您更改
    print
    语句,它也适用于2.7+
  • 删除最后一条打印语句,您将得到您想要的内容
  • 如果有更多变量
    Time,M
  • 如果有更多变量,请更改范围
  • 更少的代码
代码: 输出:
考虑到t1,t2。。。t5和m1,m2。。。m5已经提供,这里有一个可能的解决方案,使用列表理解(太多)


考虑到t1,t2。。。t5和m1,m2。。。m5已经提供,这里有一个可能的解决方案,使用列表理解(太多)


请分享一些预期输出的示例数据。我现在已经编辑了问题。谢谢。请分享一些预期输出的示例数据。我现在已经编辑了问题。谢谢。请接受作为答案,如果您对答案感到满意,请向上投票。请接受作为答案,如果您对答案感到满意,请向上投票。