小编Jul*_*ien的帖子

python-igraph如何添加带权重的边?

python-igraph如何添加带权重的边?

我有一个像[('1', '177', 1.0), ('1', '54', 1.0), ('1', '61', 2.0), ('1', '86', 2.0), ('10', '100', 38.0)]. 元组中的最后一个是从'1'到的边的权重'177'。但是如何添加呢?我用

g.add_vertices(vertexList)
g.add_edges(edgelist)
Run Code Online (Sandbox Code Playgroud)

但这是错误的。

python igraph

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

python argparse 数组而不是 str

我在使用 argparse 时遇到问题。使用下面的代码,我期望 args.dir 是一个字符串,但我得到了一个数组。我怎样才能得到一个字符串?有人可以帮忙吗?

#!/usr/bin/env python3

import sys
import argparse

#import mysql.connector

# Set version number
version = '1.0.0'

# Parse arguments supplied on the commandline
argparser = argparse.ArgumentParser(description=sys.argv[0])
argparser.add_argument('dir', nargs=1, type=str, help='directory to view')
args = argparser.parse_args()

# Print program name and version number to stdout
print(argparser.prog + " v" + version)
print('Creating index for: ' + args.dir[0])
Run Code Online (Sandbox Code Playgroud)

python argparse

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

如何迭代不同的kwargs?

我觉得以前一定要问过这个问题,但我找不到,对不起,如果是这样的话!

我有一个不同参数的函数,如:

def f(arg1, arg2, ...,argN, kw1=0, kw2=0, kw3=0):
    # some code ...
Run Code Online (Sandbox Code Playgroud)

假设我定义了我的(强制性)参数:

arg1 = some_value_1
arg2 = some_value_2
...
argN = some_value_N
Run Code Online (Sandbox Code Playgroud)

我想浓缩一些重复的函数调用,如

f(arg1, arg2, ... argN, kw1=1)
f(arg1, arg2, ... argN, kw1=23)
f(arg1, arg2, ... argN, kw2=456)
f(arg1, arg2, ... argN, kw2=789)
f(arg1, arg2, ... argN, kw3='a')
f(arg1, arg2, ... argN, kw3='b')
...
Run Code Online (Sandbox Code Playgroud)

看起来像:

for kw_def in [kw1=1, kw1=23, kw2=456, kw2=789, kw3='a', kw3='b',...]:
    f(arg1, arg2, ... argN, kw_def)
Run Code Online (Sandbox Code Playgroud)

但语法上正确.什么是正确的pythonic方式?

python kwargs

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

去除特定字符之前的部分字符串,以防该字符出现多次

我需要从字符之前出现的部分去除字符串':',其中':'可能出现多次。例如:

input: 'Mark: I am sending the file: abc.txt'
output: 'I am sending the file: abc.txt'
Run Code Online (Sandbox Code Playgroud)

我的功能是这个(Python代码)

def process_str(in_str):
    str_list = in_str.split(':')[1:]
    out_str = ''
    for each in str_list:
        out_str += each
    return out_str
Run Code Online (Sandbox Code Playgroud)

我得到的输出'I am sending the file abc.txt'没有第二个':'. 有没有办法纠正这个问题?也可以使这段代码在时间和空间复杂度上更有效吗?

python python-2.7 python-3.x

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

编写.txt文件Python时,换行符"\n"不起作用

for word in keys:
    out.write(word+" "+str(dictionary[word])+"\n")
    out=open("alice2.txt", "r")
    out.read()
Run Code Online (Sandbox Code Playgroud)

出于某种原因,python不是为字典中的每个单词创建一个新行,而是在每个键和值之间打印\n.我甚至试图分别写新行,像这样......

for word in keys:
    out.write(word+" "+str(dictionary[word]))
    out.write("\n")
    out=open("alice2.txt", "r")
    out.read()
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

python dictionary text-files file-writing

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

重新排列 numpy 数组的行和列(在单个操作中)

首先让我们把它放在一边:我已经知道这里讨论的解决方案:通过指定行和列从另一个数组创建 NumPy 数组

假设我有一个数组

test = np.arange(12).reshape((3,4))

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
Run Code Online (Sandbox Code Playgroud)

我想将其行和列重新排列成test2

array([[ 1,  0,  3,  2],
       [ 9,  8, 11, 10],
       [ 5,  4,  7,  6]])
Run Code Online (Sandbox Code Playgroud)

我现在使用的解决方案与上面链接中已经回答的解决方案相同:

test2 = test[[0,2,1]][:,[1,0,3,2]]
Run Code Online (Sandbox Code Playgroud)

然而,此解决方案创建了不必要的数据中间副本:它首先创建仅包含打乱行的副本test[[0,2,1]],然后创建第二个包含打乱列的副本。对于如此小的阵列,没有人关心,但如果阵列巨大,则该解决方案感觉不是最佳的。numpy 是否允许行和列同时洗牌?看起来像的东西test[[0,2,1],[1,0,3,2]],除了 numpy 不会那样解释这个操作......

python indexing numpy

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

用Python中的元素列表搜索列表字典的优化方法

我正在尝试在列表中搜索第一次出现的字典。我创建的逻辑适用于小数据,但我有一个一百万行的列表,其他要搜索的列表元素有 1000 个元素。

data = [{'team': 'a', 'id':11}, {'team': 'b', 'id':111}, {'team': 'c', 'id':1111}]
list_to_see = ['a','c']
check = None
for index in range(len(data)):
    if data[index]['team'] in list_to_see[index]:
        check = data[index]['id']
        break
print(check)
Run Code Online (Sandbox Code Playgroud)

#Output: 11

所以,我得到了第一个元素 Id,这正是我想要的结果。是否有任何优化的方法可以获得可以处理大数据的相同输出?谢谢

python python-3.x

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

我可以从另一个构造函数中定义一个构造函数吗?

这是一个虚拟示例来说明:

class C
{
    // complex class with many fields and methods 
    // including very expensive:
    int computeA();
    int computeB();
}

struct S
{
    S(int a, int b); // initializes as {a, b, a*b};
    // how to define below constructor?
    S(const C& c); // Should be equivalent to calling S(c.computeA(), c.computeB())

    int a;
    int b;
    int ab;
}
Run Code Online (Sandbox Code Playgroud)

我可能错过了一些简单的东西,但我所有的尝试在语法上都是不正确的。显然,我可以通过使用辅助函数而不是构造函数来规避这个问题,但是有没有正确的方法来直接定义这样的构造函数?

当然我不想这样做:

S(const C& c); // initialize as {c.computeA(), c.computeB(), c.computeA()*c.computeB()};
Run Code Online (Sandbox Code Playgroud)

因为重复不必要的昂贵计算。

c++ constructor

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

为什么dict(dict)获得相同的字典?

这可能听起来很愚蠢.当我在python中覆盖dict时:

class idict(dict):
    def __init__ (self, *args, **kwargs):
        self._store = dict(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后我用

a = {1:2, 2:3}
b=idict(a)
print b._store == a
Run Code Online (Sandbox Code Playgroud)

True

我不知道为什么dict(dict)得到同样的字典.在python中的dict有任何方法处理这个吗?我不确定我是否以正确的方式做到了.

另一个问题是:

如果我知道我将获得父类实例(如dict),我想在此实例中添加/更改方法.我通常从父类创建子类并获取子类实例.这似乎是内存效率低下的,因为父实例已经存在.

我搜索后的一种方法是直接在父类中添加/更改方法(例如parent_class.method = new_method),然后获取父类的实例.我不确定这在OOP方面是否正确.

python

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

查找列表中数字后跟一个较大数字的次数

我有这个函数来查找一个数字在列表中跟一个更大的数字的次数.还有另外一种"pythonic"方式可以做到吗?我使用的是Python 3.7.0.

提前致谢.

def find_greater_numbers(arr):
    count = 0
    i = 0
    j = 1
    while i < len(arr):
        while j < len(arr):
            if arr[j] > arr[i]:
                count += 1
            j+=1
        j = i+1
        i+=1
    return count

find_greater_numbers([6,1,2,7]]) # returns 4
Run Code Online (Sandbox Code Playgroud)

python python-3.7

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

如何从两个列表创建元组,以便重复一个列表元素

我正在尝试加入2个列表,以便第一个列表中的值按顺序连接到第二个列表中的值,然后在列表中的一个项目耗尽时再次加入...

worker_tables=['table1','table2']

mylist = [['val1','val2'], ['val3','val4'],['val5','val6'],['val7','val8'],['val9','val10']]

mylist_tup = zip(mylist, worker_tables)
Run Code Online (Sandbox Code Playgroud)

我得到的结果是 -

print mylist_tup

[(['val1', 'val2'], 'table1'), (['val3', 'val4'], 'table2')] 
Run Code Online (Sandbox Code Playgroud)

如你所见,它没有加入第一个列表中的table1和table2字段.

期望的输出=

 [(['val1', 'val2'], 'table1'),(['val3', 'val4'], 'table2'), (['val5', 'val6'], 'table1'),(['val7', 'val8'], 'table2'), (['val9', 'val10'], 'table1')]
Run Code Online (Sandbox Code Playgroud)

python tuples list

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