我想从以下列表中获取唯一值:
['nowplaying', 'PBS', 'PBS', 'nowplaying', 'job', 'debate', 'thenandnow']
Run Code Online (Sandbox Code Playgroud)
我需要的输出是:
['nowplaying', 'PBS', 'job', 'debate', 'thenandnow']
Run Code Online (Sandbox Code Playgroud)
此代码有效:
output = []
for x in trends:
if x not in output:
output.append(x)
print(output)
Run Code Online (Sandbox Code Playgroud)
我应该使用更好的解决方案吗?
为什么以下在Python中出现意外行为?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
Run Code Online (Sandbox Code Playgroud)
我使用的是Python 2.5.2.尝试一些不同版本的Python,似乎Python 2.3.3显示了99到100之间的上述行为.
基于以上所述,我可以假设Python在内部实现,使得"小"整数以不同于大整数的方式存储,is运算符可以区分.为什么泄漏抽象?当我不知道它们是否是数字时,比较两个任意对象以查看它们是否相同的更好的方法是什么?
在Python 2.6解释器上测试:
>>> a=set('abcde')
>>> a
set(['a', 'c', 'b', 'e', 'd'])
>>> l=['f','g']
>>> l
['f', 'g']
>>> a.add(l)
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
a.add(l)
TypeError: list objects are unhashable
Run Code Online (Sandbox Code Playgroud)
我认为我无法将列表添加到集合中,因为Python无法判断如果我已经两次添加相同的列表.有解决方法吗?
编辑:我想添加列表本身,而不是其元素.
虽然这个问题在实践中没有任何实际用途,但我很好奇Python如何进行字符串实习.我注意到以下内容.
>> "string" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
你也可以这样做.
>> "strin"+"g" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这非常聪明!
但你不能这样做.
>> s1 = "strin"
>> s2 = "string"
>> s1+"g" is s2
>> False
Run Code Online (Sandbox Code Playgroud)
为什么Python不会评估s1+"g",意识到它是相同的s1并指向同一个地址?在最后一个块中实际发生了什么让它返回False?
从最近的SO问题(参见在python中创建一个由列表索引的字典)我意识到我可能对python中可散列和不可变对象的含义有一个错误的概念.
我试图让以下脚本工作.输入文件由3列组成:基因关联类型,基因名称和疾病名称.
cols = ['Gene type', 'Gene name', 'Disorder name']
no_headers = pd.read_csv('orphanet_infoneeded.csv', sep=',',header=None,names=cols)
gene_type = no_headers.iloc[1:,[0]]
gene_name = no_headers.iloc[1:,[1]]
disease_name = no_headers.iloc[1:,[2]]
query = 'Disease-causing germline mutation(s) in' ###add query as required
orph_dict = {}
for x in gene_name:
if gene_name[x] in orph_dict:
if gene_type[x] == query:
orph_dict[gene_name[x]]=+ 1
else:
pass
else:
orph_dict[gene_name[x]] = 0
Run Code Online (Sandbox Code Playgroud)
我一直收到错误消息:
系列对象是可变的,不能进行哈希处理
任何帮助将非常感谢!
下面当我尝试哈希一个列表时,它给了我一个错误但是使用了一个元组.猜猜它与不变性有关.有人可以详细解释一下吗?
名单
x = [1,2,3]
y = {x: 9}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
元组
z = (5,6)
y = {z: 89}
print(y)
{(5, 6): 89}
Run Code Online (Sandbox Code Playgroud) 我的最小工作示例如下:我有一个循环迭代一定次数.在每次迭代中,我想创建一个具有名称的新密钥,该密钥取决于当前索引值,例如key_j,并为其分配特定值.有没有办法做到这一点?
for j in range(10):
dict[key_j] = j**2
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个来自csv文件的代码列表:
file_path = 'c:\\temp\\list.csv'
csvfile = open(file_path, 'rb')
reader = csv.reader(csvfile, delimiter=';')
rr = []
for sor in reader:
if sor[1][0] == '1':
rr.append(sor)
print type(rr)
<type 'list'>
set (rr)
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
set (rr)
TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
如果我在来自数据库的其他列表上执行相同操作,则可以正常工作:
cur.execute('select code from mytable')
res = cur.fetchall()
res1 = []
res1.append(x[0] for x in res)
print type(res1)
<type 'list'>
set(res1)
set(['13561255', '11120088'])
Run Code Online (Sandbox Code Playgroud)
rr和res1有什么区别,因为它们都是列表类型?
实际上我正在寻找数据库中的记录,这些记录在csv文件中不存在
result = list(set(res1) - set(rr))
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点(可能以更优/更快的方式)?
考虑以下Python解释器shell会话:
>>> class D(dict):
... def __hash__(self):
... return id(self)
...
>>> d1 = D({'a': 'b'})
>>> d2 = D({'a1': 'b1'})
>>> t = {d1: 1, d2: 2}
>>> t[d1]
1
>>> t[d2]
2
Run Code Online (Sandbox Code Playgroud)
为什么没有dict的__hash__默认值id()?导致禁止使用可变实体作为字典键的设计决定是什么?
python ×10
dictionary ×2
list ×2
set ×2
hash ×1
identity ×1
immutability ×1
int ×1
internals ×1
key ×1
loops ×1
operators ×1
python-2.7 ×1
string ×1