gpt4 book ai didi

python - 遍历列表,如果列表中的任何索引值的长度 < 3。然后附加到 new_list。忽略在其他任何地方重复这些元素的索引

转载 作者:行者123 更新时间:2023-12-04 10:14:21 24 4
gpt4 key购买 nike

假设,我有一个名为 C 的列表。

C = (1,2,3),(4,5,6),(20),(14),(16,17,18,21),(21,22),(22,23),(24,25)

我想将 20 和 14 等值加入 new_list ;仅当 20 和 14 不
出现在任何子集中,例如(1,2,3),(16,17,18,21)等。我不想加入(21,22),因为(21)已经存在于(16, 17、18、21)。我也不想加入 (21, 22) 或 (22,23) 因为它们重复。

简而言之,我选择 (24, 25) & (20) & (14) 因为它们不会在任何子集中重复。此外,它们的元素必须少于 3 个。

例子
new_list = (24,25,20,14)

这是我到目前为止所尝试的。
new_list=[];
for a in range(0, len(C)):
#suppose to prevent out of range error
if a <= len(C) -1:
#suppose to check every subset for repeating elements
for b in range(len(C[a+1])):
#again to prevent out of range error
if b <= len(C) - 1:
#using set comparison (this may be a semantic bug)
false_or_true_trip_wire = set(str(C[a])) <= set(C[b])
#I don't want to accidently append a duplicate
I_do_not_want_both_sets_too_equal = set(str(C[a])) != set(C[b])
if false_or_true_trip_wire == 'False':
if I_do_not_want_both_sets_too_equal == 'True':
new_list.append(C[a])
new_list.append(C[b])

输出

当任何子集有一个元素时输入错误。它适用于具有 2 个或更多元素的子集,例如 len() 为 3 的子集。例如 (1,2,3)

我正在尝试做的一件事的例子。
C = (5,6,2),(1,3,4),(4),(3,6,2)

for j in range(0, len(C)):
print(len(C[j]))

示例输出
3
3
Traceback (most recent call last):
File "C:/Users/User/Desktop/come on.py", line 4, in <module>
print(len(C[j]))
TypeError: object of type 'int' has no len()

问题

那么,有什么方法可以创建一个可以执行我上面举例说明的函数吗?而且,不使用 str()?
  • 请给没有类的人解释一下
    Python,但一直是自学的。
  • 如果我能找到一个函数来摆脱所有这些嵌套循环
    将更容易摆脱导致
    类型错误。任何答案都会有所帮助。
  • 最佳答案

    Suppose, I have list called C.

    C = (1,2,3),(4,5,6),(20),(14),(16,17,18,21),(21,22),(22,23),(24,25)



    首先,您的 C变量分配给 tupletupleint对象不是 list . See this tutorial for more info on these objects. You can also verify this is the case with your own code here.

    Type errors when any of the subsets have one element. It would work for subsets with 2 or more elements such as one's with len() of 3. Such as (1,2,3)



    你得到 TypeError因为一个 tuple单个对象的实际不是 tuple ,它只是它里面的那个对象。因此,如果您调用 len嵌套对象上的函数,然后是 len函数将 raise这样的 TypeError如果该嵌套对象不是具有 __len__ 的序列对象吗?方法。
    int对象没有这个 __len__方法,因此是 TypeError: object of type 'int' has no len()当它们被传递到 len 时引发功能。在 tuple您已分配给 C ,你有两个这样的 int索引 2 处的对象 (20)和 3 (14) .把这些变成 tuple对象,您需要使用尾随逗号来制作所谓的单例:
    C = (1,2,3),(4,5,6),(20,),(14,),(16,17,18,21),(21,22),(22,23),(24,25)

    for j in range(0, len(C)):
    # Now that every object in the tuple is another tuple len(C[j]) will work!
    print(len(C[j]))
    print(type(C[j]))


    See it work in python tutor!

    现在已经不碍事了,我不想假设您要更改 C来自 tupletupleint对象变成了一个 tupletuple对象,所以让我们回到你原来的 C = (1,2,3),(4,5,6),(20),(14),(16,17,18,21),(21,22),(22,23),(24,25)看看我们是否可以编写一些代码来产生你所期望的 (24,25,20,14)遵循您概述的规则:

    In short, I'm taking (24, 25) & (20) & (14) because they don't repeat in any of the subsets. Also, they must have less than 3 elements.



    这是我想出的似乎遵循这些规则的代码:
    C = (1,2,3),(4,5,6),(20),(14),(16,17,18,21),(21,22),(22,23),(24,25)
    temp_C = [x if type(x) == tuple else tuple([x]) for x in C]
    new_c = []
    for i,c in enumerate(temp_C):
    l = len(c)
    if l <= 2:
    temp_b = [
    item for j, sub in enumerate(temp_C) for item in sub if i!=j
    ]
    if all(
    [y not in temp_b for y in c]
    ):
    [new_c.append(y) for y in c]

    new_c = tuple(new_c)

    print(new_c)


    输出:
    (20, 14, 24, 25)

    (24,25,20,14)的顺序不同,但它与我今晚将为您提供的预期输出一样接近。最后, here is that code in python tutor .希望您逐步了解它的逻辑。

    关于python - 遍历列表,如果列表中的任何索引值的长度 < 3。然后附加到 new_list。忽略在其他任何地方重复这些元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61151579/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com