相关疑难解决方法(0)

从python中的列表中获取唯一值

我想从以下列表中获取唯一值:

['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

701
推荐指数
17
解决办法
138万
查看次数

"是"运算符与整数意外行为

为什么以下在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 int identity operators python-internals

476
推荐指数
11
解决办法
6万
查看次数

Python:添加列表来设置?

在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 list set

209
推荐指数
9
解决办法
26万
查看次数

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

python string internals

80
推荐指数
2
解决办法
1万
查看次数

可洗,不变

从最近的SO问题(参见在python中创建一个由列表索引的字典)我意识到我可能对python中可散列和不可变对象的含义有一个错误的概念.

  • 在实践中,什么是可以平均的?
  • hashable和immutable之间的关系是什么?
  • 是否有可变对象是可清洗的或不可变的对象?

python hash immutability data-structures

76
推荐指数
4
解决办法
3万
查看次数

"系列对象是可变的,不能被散列"错误

我试图让以下脚本工作.输入文件由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)

我一直收到错误消息:

系列对象是可变的,不能进行哈希处理

任何帮助将非常感谢!

python

43
推荐指数
2
解决办法
10万
查看次数

在Python中,为什么元组可以清除而不是列表?

下面当我尝试哈希一个列表时,它给了我一个错误但是使用了一个元组.猜猜它与不变性有关.有人可以详细解释一下吗?

名单

 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)

python

13
推荐指数
3
解决办法
6326
查看次数

Python:在循环中动态更改的字典键名

我的最小工作示例如下:我有一个循环迭代一定次数.在每次迭代中,我想创建一个具有名称的新密钥,该密钥取决于当前索引值,例如key_j,并为其分配特定值.有没有办法做到这一点?

for j in range(10):
    dict[key_j] = j**2
Run Code Online (Sandbox Code Playgroud)

谢谢

python dictionary loops key

3
推荐指数
1
解决办法
4503
查看次数

TypeError:unhashable type:'list',将list转换为set

我有一个来自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 list set python-2.7

2
推荐指数
1
解决办法
6022
查看次数

为什么可变实体不能成为字典键?

考虑以下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 dictionary

1
推荐指数
1
解决办法
472
查看次数