多个解包分配的教科书示例如下:
import numpy as NP
M = NP.arange(5)
a, b, c, d, e = M
# so of course, a = 0, b = 1, etc.
M = NP.arange(20).reshape(5, 4) # numpy 5x4 array
a, b, c, d, e = M
# here, a = M[0,:], b = M[1,:], etc. (ie, a single row of M is assigned each to a through e)
Run Code Online (Sandbox Code Playgroud)
(我的问题不numpy具体.事实上,我更喜欢纯Python解决方案.)
对于我现在正在看的那段代码,我看到了这个直接场景的两个复杂问题:
我通常不会知道M的形状; 和
我想解压一定数量的物品(绝对比所有项目更少),我想把其余为单一 容器
回到上面的5x4数组,我非常想做的是分别将前三行M分配给a,b和c(完全如上),其余行(我不知道如何)很多东西,只有一些正整数)到一个容器,all_the_rest = [].
在javascript中,如果我们有一些代码,如
var a = "one";
var b = q || a;
alert (b);
Run Code Online (Sandbox Code Playgroud)
逻辑OR运算符将为b分配值,并且警报将为"1".
这仅限于作业还是我们可以在任何地方使用它?
似乎空字符串的处理方式与undefined相同.这是正确的吗?
这如何与AND变量一起使用?它们的组合怎么样?
什么时候使用这些成语,或何时不使用?
在一行中使用两个赋值运算符时的操作顺序是什么?
public static void main(String[] args){
int i = 0;
int[] a = {3, 6};
a[i] = i = 9; // this line in particular
System.out.println(i + " " + a[0] + " " + a[1]);
}
Run Code Online (Sandbox Code Playgroud)
编辑:感谢您的帖子.我得到了=从右边获取值,但是当我编译它时,我得到:
9 9 6
Run Code Online (Sandbox Code Playgroud)
我认为它本来是和ArrayOutOfBounds异常,但它在它移动到9 之前分配'a [i]' 它是否只是为数组做那个?
我试图了解pandas MultiIndex DataFrames以及如何为它们分配数据.具体来说,我有兴趣分配与另一个较小数据帧匹配的整个块.
ix = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c', 'd']])
df = pd.DataFrame(index=ix, columns=['1st', '2nd', '3rd'], dtype=np.float64)
df_ = pd.DataFrame(index=['a', 'b', 'c', 'd'], columns=['1st', '2nd', '3rd'], data=np.random.rand(4, 3))
df_
1st 2nd 3rd
a 0.730251 0.468134 0.876926
b 0.104990 0.082461 0.129083
c 0.993608 0.117799 0.341811
d 0.784950 0.840145 0.016777
Run Code Online (Sandbox Code Playgroud)
df是相同的,除了所有的值都有,NaN并且有两个块A和B.现在,如果我想分配值df_,df我想我可以做类似的事情
df.loc['A',:] = df_ # Runs, does not work
df.loc[('A','a'):('A','d')] = df_ # AssertionError (??) 'Start slice bound …Run Code Online (Sandbox Code Playgroud) ES6的新解构分配功能现在已经众所周知(Babel的REPL上的实时副本); 在已存在的变量的情况下:
let a, b; // Existing variables
let o = {a: "a", b: "b"}; // An object to get values from
// ...
({a, b} = o); // Set them to the props from `o`
console.log(a); // "a"
console.log(b); // "b"
Run Code Online (Sandbox Code Playgroud)
ES6中是否有简单的说法?基于具有相同名称的变量设置现有对象的属性?(除了显而易见的o.a = a; o.b = b;)
注意我不是在讨论创建对象时,我们可以使用美妙的新对象初始化器语法来实现这一点,这样我们就不会不必要地重复这些名称:
let a = "a";
let b = "b";
let o = {a, b};
Run Code Online (Sandbox Code Playgroud)
但是如果我已经有了一个对象,我可以在ES6中进行某种结构分配吗?
在查看最近在SO上发布的答案时,我注意到了一个不熟悉的任务说明.而不是通常的形式 myVar<- myValue,它使用了myVar[]<- myValue.就个人而言,我从未见过这样的作业,但它有一个非常有用的效果 - 它将指定的数据myValue重新塑造为myVar的形状.
我想在我的代码中使用它.然而,文档"<-"似乎是沉默的.
这是一个完善的功能,可以依靠它在所有情况下工作吗?
另外,我的猜测是它可能是函数调用堆栈的副作用,即调用<-和[按顺序,但我无法弄清楚如何.有人可以对此有所了解吗?
这是一个例子 -
# A dataframe
df1<- data.frame(a=1:4, b=11:14)
# simple assignment assigns to class of RHS
df1<- c(21:24,31:34)
df1
#[1] 21 22 23 24 31 32 33 34
class(df1)
#[1] "integer"
#assignment with [] casts to class of LHS
df1<- data.frame(a=1:4, b=11:14)
df1[]<- c(21:24,31:34)
df1
# a b
# 1 21 31
# 2 22 32
# 3 23 33
# 4 …Run Code Online (Sandbox Code Playgroud) 最近我接受了一家软件公司的采访,在技术能力回合中询问了以下问题:
以这样的方式声明我,条件总是为真:
while(i != i) {
}
Run Code Online (Sandbox Code Playgroud)
在Java中技术上是否可以分配这种东西?
当我试图在 stackoverflow 上回答另一个人关于Python=和+=Python之间的区别的问题时,我遇到了以下问题:
class Foo:
def __init__(self, value, name="default"):
self.value = value
self.name = name
def __add__(self, that):
return Foo(self.value + that.value)
def __iadd__(self, that):
self.value = self.value + that.value
return self
def __str__(self):
return "name: {}, value: {:d}".format(self.name, self.value)
a = Foo(1, 'alice')
b = Foo(2, 'bob')
print(a+=b)
Run Code Online (Sandbox Code Playgroud)
最后一个print电话没有成功,给了我这个:
File "<ipython-input-8-0faa82ba9e4a>", line 3
print(a+=b)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这不起作用。也许它与关键字参数传递机制有关?我只是找不到关于这个主题的任何资源,因为重载的__iadd__方法已经返回了一个Foo对象。
************** 更新 ******************
如果我__iadd__像这样更改方法(只需删除return语句):
... …Run Code Online (Sandbox Code Playgroud) 我来自C背景的javascript.在javascript中,当我使用赋值运算符将一个对象分配给另一个对象时,它是将值从一个复制到另一个,还是现在它们都指向相同的数据?或者,赋值运算符在这种情况下做了什么?
function point_type()
{
this.x = 0;
this.y = 0;
}
var pnt1 = new point_type();
var pnt2 = new point_type();
pnt1.x = 4;
pnt1.y = 5;
pnt2 = pnt1;
pnt1.x = 8;
pnt2.y = 9;
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,pnt2.x现在是否等于8,还是等于4,还是等于0?
是的,我意识到我可以自己测试一下,我会在等待社区提出答案时这样做.但是,我希望我的问题的答案只会回过头来回答这个例子,并且可能会对javascript对象的工作方式和一些最佳实践有所启发.
跟进问题:
答案似乎是复制了引用.pnt2和pnt1现在指向相同的数据.是否可以设置我的对象以便复制值?这通常是如何在javascript中完成的?显然,我不希望每次需要复制此对象时单独设置每个属性.
我正在实现一个带有记录和内部动态数组的N x M矩阵(类),如下所示.
TMat = record
public
// contents
_Elem: array of array of Double;
//
procedure SetSize(Row, Col: Integer);
procedure Add(const M: TMat);
procedure Subtract(const M: TMat);
function Multiply(const M: TMat): TMat;
//..
class operator Add(A, B: TMat): TMat;
class operator Subtract(A, B: TMat): TMat;
//..
class operator Implicit(A: TMat): TMat; // call assign inside proc.
// <--Self Implicit(which isn't be used in D2007, got compilation error in DelphiXE)
procedure Assign(const M: TMat); // copy _Elem inside proc.
// …Run Code Online (Sandbox Code Playgroud) javascript ×3
python ×3
java ×2
arrays ×1
casting ×1
deep-copy ×1
delphi ×1
ecmascript-6 ×1
matrix ×1
multi-index ×1
object ×1
operations ×1
operators ×1
pandas ×1
r ×1
record ×1
reshape ×1
syntax ×1
variables ×1
while-loop ×1