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)
但这是错误的。
我在使用 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) 我觉得以前一定要问过这个问题,但我找不到,对不起,如果是这样的话!
我有一个不同参数的函数,如:
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方式?
我需要从字符之前出现的部分去除字符串':',其中':'可能出现多次。例如:
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'没有第二个':'. 有没有办法纠正这个问题?也可以使这段代码在时间和空间复杂度上更有效吗?
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)
我该怎么办?
首先让我们把它放在一边:我已经知道这里讨论的解决方案:通过指定行和列从另一个数组创建 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 不会那样解释这个操作......
我正在尝试在列表中搜索第一次出现的字典。我创建的逻辑适用于小数据,但我有一个一百万行的列表,其他要搜索的列表元素有 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,这正是我想要的结果。是否有任何优化的方法可以获得可以处理大数据的相同输出?谢谢
这是一个虚拟示例来说明:
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)
因为重复不必要的昂贵计算。
这可能听起来很愚蠢.当我在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方面是否正确.
我有这个函数来查找一个数字在列表中跟一个更大的数字的次数.还有另外一种"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) 我正在尝试加入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 ×10
python-3.x ×2
argparse ×1
c++ ×1
constructor ×1
dictionary ×1
file-writing ×1
igraph ×1
indexing ×1
kwargs ×1
list ×1
numpy ×1
python-2.7 ×1
python-3.7 ×1
text-files ×1
tuples ×1