我在Python中有一个对象列表,我想要将它们混洗.我以为我可以使用该random.shuffle方法,但当列表是对象时,这似乎失败了.是否有一种方法可以改变对象或其他方式?
import random
class A:
foo = "bar"
a1 = a()
a2 = a()
b = [a1, a2]
print(random.shuffle(b))
Run Code Online (Sandbox Code Playgroud)
这将失败.
是否有内置功能可以从Python中的列表中删除重复项,同时保留顺序?我知道我可以使用一个集来删除重复项,但这会破坏原始顺序.我也知道我可以像这样滚动自己:
def uniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
return output
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话,我想利用内置或更多的Pythonic习语.
条件:不修改原始列表; 仅限JDK,没有外部库.单行或JDK 1.3版本的奖励积分.
有没有比以下更简单的方法:
List<String> newList = new ArrayList<String>();
newList.addAll(listOne);
newList.addAll(listTwo);
Run Code Online (Sandbox Code Playgroud) 我最近比较了处理速度[]和,list()并且惊讶地发现它的[]运行速度比它快三倍list().我跑了相同的测试与{}和dict(),结果几乎相同:[]和{}两个花了大约0.128sec /百万次,而list()和dict()大约花费每个0.428sec /万次.
为什么是这样?不要[]和{}(可能()和'',太)立即传回文字的一些空股票的份,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素?
我不知道这两种方法有何不同,但我很想知道.我无法在文档中或在SO上找到答案,搜索空括号结果比我预期的问题更多.
我拨打了我的时序结果timeit.timeit("[]")和timeit.timeit("list()"),和timeit.timeit("{}")和timeit.timeit("dict()"),分别比较列表和字典.我正在运行Python 2.7.9.
我最近发现的" 为什么是,如果真慢于如果为1? "来比较的性能if True来if 1,似乎触及了类似的文字,对全局的情况; 也许值得考虑一下.
在Python 2.7中,我可以将字典键,值或项目作为列表获取:
>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
现在,在Python> = 3.3中,我得到这样的东西:
>>> newdict.keys()
dict_keys([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
所以,我必须这样做以获得一个列表:
newlist = list()
for i in newdict.keys():
newlist.append(i)
Run Code Online (Sandbox Code Playgroud)
我想知道,有没有更好的方法来返回Python 3中的列表?
将a转换Map<key,value>为a 的最佳方法是List<value>什么?只是迭代所有值并将它们插入列表中或者我忽略了什么?
我对枚举器如何工作以及LINQ有些怀疑.考虑这两个简单的选择:
List<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerable<Animal> sel = (from animal in Animals
join race in Species
on animal.SpeciesKey equals race.SpeciesKey
select animal).Distinct();
Run Code Online (Sandbox Code Playgroud)
我更改了原始对象的名称,因此这看起来像一个更通用的示例.查询本身并不重要.我想问的是:
foreach (Animal animal in sel) { /*do stuff*/ }
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我使用IEnumerable,当我调试并检查"sel"时,在这种情况下是IEnumerable,它有一些有趣的成员:"inner","outer","innerKeySelector"和"outerKeySelector",这些最后2个出现成为代表."内部"成员中没有"Animal"实例,而是"Species"实例,这对我来说非常奇怪."外部"成员确实包含"Animal"实例.我假设两位代表确定哪些进入,哪些进出?
我注意到如果我使用"Distinct","inner"包含6个项目(这是不正确的,因为只有2个是Distinct),但"outer"确实包含正确的值.同样,委托方法可能决定了这一点,但这比我对IEnumerable的了解要多一些.
最重要的是,两种选择中的哪一种是性能最佳的?
邪恶的名单转换通过.ToList()?
或者直接使用枚举器?
如果可以,请解释一下或抛出一些解释IEnumerable使用的链接.
list ×10
python ×6
java ×3
collections ×2
arrays ×1
c# ×1
dictionary ×1
duplicates ×1
ienumerable ×1
jdk1.5 ×1
linq ×1
literals ×1
map ×1
performance ×1
python-2.x ×1
python-3.x ×1
random ×1
shuffle ×1
string ×1
unique ×1