相关疑难解决方法(0)

有没有python方法根据提供的新索引重新排序列表?

假设我有一个工作清单:['a','b','c']和索引列表[2,1,0],它会将工作清单更改为:['c','b','a "]

是否有任何python方法可以轻松完成此任务(工作列表也可能是一个numpy数组,因此更适合使用更具适应性的方法)?谢谢!

python numpy

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

迭代生成器和列表之间的速度差异

在下面的简单示例中,有两个函数可以对随机数列表进行排序.第一种方法传递sorted生成器表达式,第二种方法首先创建一个列表:

import random
l = [int(1000*random.random()) for i in xrange(10*6)]

def sort_with_generator():
    return sorted(a for a in l)

def sort_with_list():
    return sorted([a for a in l])
Run Code Online (Sandbox Code Playgroud)

使用行分析器进行基准测试表明第二个选项(sort_with_list)的速度大约是生成器表达式的两倍.

任何人都可以解释发生了什么,为什么第一种方法比第二种方法慢得多?

python performance generator

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

在 Python 中检查目录是否为空的最快方法是什么

我在 Windows 机器上工作,想检查网络路径上的目录是否为空。

想到的第一件事是调用os.listdir()并查看它的长度是否为 0。

IE

def dir_empty(dir_path):
    return len(os.listdir(dir_path)) == 0
Run Code Online (Sandbox Code Playgroud)

因为这是一个网络路径,我的连接并不总是很好,而且一个文件夹可能包含数千个文件,所以这是一个非常慢的解决方案。有没有更好的?

python directory operating-system network-programming path

4
推荐指数
2
解决办法
1924
查看次数

列表理解引发 RuntimeError

为什么这段代码运行良好并且不抛出异常?

def myzip(*args):
    iters = [iter(arg) for arg in args]
    try:
        while True:
            yield tuple([next(it) for it in iters])
    except StopIteration:
        return


for x, y, z in myzip([1, 2], [3, 4], [5, 6]):
    print(x, y, z)
Run Code Online (Sandbox Code Playgroud)

但如果这条线

yield tuple([next(it) for it in iters])
Run Code Online (Sandbox Code Playgroud)

替换为

yield tuple(next(it) for it in iters)
Run Code Online (Sandbox Code Playgroud)

然后一切都停止工作并抛出RuntimeError?

python list-comprehension python-2.7 python-3.x python-zip

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

Python 3:从元组列表中删除空元组

我有一个元组列表,如下所示:

>>>myList
[(), (), ('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
Run Code Online (Sandbox Code Playgroud)

我想这样读:

>>>myList
[('',), ('c', 'e'), ('ca', 'ea'), ('d',), ('do',), ('dog', 'ear', 'eat', 'cat', 'car'), ('dogs', 'cars', 'done', 'eats', 'cats', 'ears'), ('don',)]
Run Code Online (Sandbox Code Playgroud)

即我想()从列表中删除空元组.在这样做时我想保留元组('',).我似乎无法找到从列表中删除这些空元组的方法.

我已经尝试myList.remove(())并使用for循环来执行此操作,但要么不起作用,要么我的语法错误.任何帮助,将不胜感激.

python tuples list

3
推荐指数
2
解决办法
5684
查看次数

通过索引列表置换元组

我有一个3元素的python元组,我正在尝试使用3元素列表的索引进行排序或重新排列,我想知道最简洁的方法是什么.

到目前为止我有:

my_tuple = (10, 20, 30)
new_positions = [2, 0, 1]
my_shuffled_tuple = my_tuple[new_positions[0]], my_tuple[new_positions[1]], my_tuple[new_positions[2]]
# outputs: (30, 10, 20)
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我也得到相同的结果:

my_shuffled_tuple = tuple([my_tuple[i] for i in new_positions])
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的创作方式my_shuffled_tuple

python tuples

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

Python 中的 For 循环

有人可以向我解释一下这一行吗

set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
Run Code Online (Sandbox Code Playgroud)

来自计算两个Python字典中包含的键的差异

我是 Python 新手,从未见过任何类似于“o for o”的编程语言,并且无法找到任何参考来理解这意味着什么。

谢谢。

python

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

为什么 wordnet 中的 NLTK wn.all_synsets() 函数不返回同义词集列表?

我为这个问题编写代码:

没有下义词的名词同义词集的百分比是多少?您可以使用 wn.all_synsets('n') 获取所有名词同义词集。

这是我的代码:

import nltk
from nltk.corpus import wordnet as wn

all_noun = wn.all_synsets('n')
print(all_noun)
print(wn.all_synsets('n'))
all_num = len(set(all_noun))
noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= 1]
noun_have_num = len(noun_have_hypon)
print('There are %d nouns, and %d nouns without hyponyms, the percentage is %f' %
  (all_num, noun_have_num, (all_num-noun_have_num)/all_num*100))
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,输​​出是

<generator object all_synsets at 0x10927b1b0>

<generator object all_synsets at 0x10e6f0bd0>

有名词 82115 个,无下位词名词 16693 个,百分比为 79.671193

但如果改变

noun_have_hypon = [word for word in wn.all_synsets('n') if len(word.hyponyms()) >= …

python nlp generator nltk wordnet

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

Python 中字典列表的条件运算

我想根据另一个键的条件(例如Gender == 'male')来总结此字典列表中所有人的年龄:

list_of_dicts= [  
              {"Name": "Ethan", "Gender": "male", "Age": 11},
              {"Name": "Nathan", "Gender": "male", "Age": 6},
              {"Name": "Sophie", "Gender": "female", "Age": 14},
              {"Name": "Patrick", "Gender": "male", "Age": 11}
]
Run Code Online (Sandbox Code Playgroud)

下面的代码完成了它,但我想知道是否有更Pythonic/紧凑的方法来做到这一点?也许类似于字典列表的 SQL 查询?

total_male_age = 0

for dict in list_of_dicts: 
    if dict.get("Gender") == "male":
        total_male_age = total_male_age + dict.get("Age")  


#total_male_age  = 28
Run Code Online (Sandbox Code Playgroud)

python json dictionary list

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

不懂 Python lambda 函数语法

我不明白这个语法是如何工作的,也找不到关于它的文档:

word = '123xyz567'
s = ''.join (c if c.isdigit() else ' 'for c in word)
Run Code Online (Sandbox Code Playgroud)

代码的第 2 行将采用 xyz123 并"123 567"通过传入一个要连接的 lambda 函数将它们连接成一个字符串

但是,我对这种语法的工作方式感到困惑,通常是一个 python if-else 语句:

def example():
    for c in word:
        if c.isdigit():
            return c
        else:
            return ' ' 
Run Code Online (Sandbox Code Playgroud)

有人可以解释或指导我查看向我解释传入的 lambda 函数的语法结构.join()以及我如何正确使用它的文档吗?

python function conditional-statements

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