Python 当它';这是重复

Python 当它';这是重复,python,list,inverse,Python,List,Inverse,我想打印一个结果,不重复与我的乘法 这里有一个例子: 5*3*2=30 2*3*5=30 5*2*3=30 3*2*5=30 ..... 所有这些元素都来自我浏览的列表,你可以看到它总是=30 所以我只想显示第一个元素(5*3*2),而不显示其他元素,因为它们是相同的 更准确地说,我举了一个例子: list = ['5*3*2','5*2*3','2*3*5','2*5*3'] for i in list: if eval(i) == eval(i)+1 ??? (

我想打印一个结果,不重复与我的乘法

这里有一个例子:


5*3*2=30
2*3*5=30
5*2*3=30
3*2*5=30
.....
所有这些元素都来自我浏览的列表,你可以看到它总是=30

所以我只想显示第一个元素(5*3*2),而不显示其他元素,因为它们是相同的

更准确地说,我举了一个例子:

list = ['5*3*2','5*2*3','2*3*5','2*5*3']

for i in list:       
     if eval(i) == eval(i)+1 ??? (I dont know how to say the next element)
            print(eval(i))

感谢阅读

类似于此的内容,带有
不在
将对您有所帮助

#python 3.5.2
list = ['5*3*2','5*2*3','6*9','2*3*5','2*5*3','8*3','9*6']
elm = []
for i in list:   
    elm_value = eval(i)
    if elm_value not in elm:
        elm.append(elm_value)
print(elm)
演示:比较:

eval(i) == eval(i)+1 
如果数字
i
等于
i+1
,则将进行比较,该值将始终返回
False
。我确信您的意思是使用
I
作为索引,只是想比较当前元素是否等于列表中的下一个元素。但是,这样做并不能真正记录重复,因为你必须考虑列表中的其他内容。

使用
list
作为变量名也不是一个好主意,因为它隐藏了内置函数。你可以使用很多其他合适的名字

一种方法是使用集合跟踪您看到的项目,并仅打印您第一次看到的项目:

lst = ["5*3*2","5*2*3","2*3*5","2*5*3"]

seen = set()
for exp in lst:
    calc = eval(exp)
    if calc not in seen:
        print(calc)
        seen.add(calc)
如果您总是使用
*
运算符(无括号)处理简单的乘法表达式,您也可以在此处使用and而不是
eval
。这将首先将数字拆分为
*
,将每个数字字符串映射为一个整数,然后将每个元素相乘

from operator import mul
from functools import reduce

lst = ["5*3*2","5*2*3","2*3*5","2*5*3"]

seen = set()
for exp in lst:
    numbers =  map(int, exp.split("*"))
    calc = reduce(mul, numbers)
    if calc not in seen:
        print(calc)
        seen.add(calc)
输出:

30

以下是:

l = ['5*3*2','5*2*3','2*3*5','2*5*3', '2*2']
(请注意,列表在python中已经存在,所以我不建议将其用作变量名)

我首先创建一个独特值列表:

unique_vals = set(map(eval, list))
set([4, 30])
然后,对于每个唯一值,获得l中的第一个匹配项:

[next(x for x in l if eval(x) ==  i) for i in unique_vals]
我得到:

['2*2', '5*3*2']

这就是你想要的吗?

eval(i)
等于30,但
eval(i)+1
等于31。当然,这不是你的意思。嗯,不是真的,我的列表中的所有数字组合都有括号,例如(3+2)*5或(2+3)*5或5*(3+2)或5*(2+3),但你看到的结果是相同的,所以我只想打印这里4个元素中的1个,这不是我显示的输出吗?或者你想要30作为输出?我刚刚添加了2*2来表示如果你有一个额外的元素,它仍然可以工作。如果你只想要30,你可以停在unique_vals,是的,我不想要1个值,因为如果我想要10,我可以做(5*2)或5+2+3,我需要2个不同的结果,我想要的是更多地删除操作符的交换性!哈,我明白了!例如,如果你10年有2*(2+3),你也想保留它,但你不会想要2*(3+2)。有趣的例子:)不知道如何做到这一点,而不写下大量定义a==b的规则(但如果我要这么做,我可能会写一个类,在_eq_中定义规则,并(几乎)完成我展示的代码)。我将关注这个帖子!没错!!!我正在尝试,我想我只是用(2*3*5)=(5*3*2)这样的乘法。。。我也用了+但我不知道当我有“+”和“*”和“/”时怎么做。。。在相同的操作中。。谢谢!