有没有理由为什么在循环中循环隐式元组for是正常的,但是当你在理解中执行它时会出现语法错误?
例如:
for i in 'a','b','c':
print(i)
'a'
'b'
'c'
Run Code Online (Sandbox Code Playgroud)
但理解是:
>>> [i for i in 'a','b','c']
File "<stdin>", line 1
[i for i in 'a','b','c']
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
是否有一个原因?我不确定正确的术语,所以我的搜索没有任何用处.
更新:
按照意见,这个语法是有效的Python 2.x的,但不是为Python 3.x的
作为一个例子,我有一个通用脚本,使用python-docx输出默认表格样式(此代码运行正常):
import docx
d=docx.Document()
type_of_table=docx.enum.style.WD_STYLE_TYPE.TABLE
list_table=[['header1','header2'],['cell1','cell2'],['cell3','cell4']]
numcols=max(map(len,list_table))
numrows=len(list_table)
styles=(s for s in d.styles if s.type==type_of_table)
for stylenum,style in enumerate(styles,start=1):
label=d.add_paragraph('{}) {}'.format(stylenum,style.name))
label.paragraph_format.keep_with_next=True
label.paragraph_format.space_before=docx.shared.Pt(18)
label.paragraph_format.space_after=docx.shared.Pt(0)
table=d.add_table(numrows,numcols)
table.style=style
for r,row in enumerate(list_table):
for c,cell in enumerate(row):
table.row_cells(r)[c].text=cell
d.save('tablestyles.docx')
Run Code Online (Sandbox Code Playgroud)
接下来,我打开文档,突出显示拆分表并在段落格式下选择"Keep with next",这成功阻止了表格在页面中拆分:
这是非破坏表的XML代码:
您可以看到突出显示的行显示应该将表保持在一起的段落属性.所以我写了这个函数并将其粘贴d.save('tablestyles.docx')在行上方的代码中:
def no_table_break(document):
tags=document.element.xpath('//w:p')
for tag in tags:
ppr=tag.get_or_add_pPr()
ppr.keepNext_val=True
no_table_break(d)
Run Code Online (Sandbox Code Playgroud)
当我检查XML代码时,段属性标记设置正确,当我打开Word文档时,将检查所有表的"保持下一个"框,但表仍然在页面之间拆分.我错过了一个XML标签或者阻止它正常工作的东西吗?
我想创建一个具有以下流程的应用程序:
DTDT,它对 #2 中创建的可编辑 DataTable 中的更改做出反应(在下面的示例中,只需将数字列乘以 2)这是执行 #1 和 #2 的示例。但是,#3 不起作用,因为通常通过可编辑公开的信息DT不会出现在 my 中input,可能是由于某些范围或渲染顺序问题。
library(shiny)
library(DT)
library(dplyr)
ui <- fluidPage(
sidebarLayout(
sidebarPanel =
sidebarPanel(
selectInput("cars", "Pick a vehicle", rownames(mtcars), multiple = T),
actionButton("add", "Create Tabs")
),
mainPanel =
mainPanel(
tabsetPanel(
id = "panel"
)
)
)
)
server <- function(input, output, session) {
df <- tibble::rownames_to_column(mtcars, "car")
data <- reactiveVal()
observe({
req(df, input$cars)
# Step 1) split data by …Run Code Online (Sandbox Code Playgroud) 说我有一个清单:
>>> nested=[[1, 2], [3, [4]]]
Run Code Online (Sandbox Code Playgroud)
我试图得到一个函数,[1,1,0]如果我正在寻找将返回4。如果指定的元素不在列表中,则它将返回一个空列表[]。
Nested 可以具有任何结构,所以我认为某种类型的递归函数将是最好的,但是在控制结构的深度和广度方面遇到了麻烦。
这不是工作代码,而是按照我的想法:
def locate(x,element,loc=[0],counter=0):
for c,i in enumerate(x):
if isinstance(i,list):
locate(i,loc+[0],counter+1)
else:
loc[counter]=c
if i==element: return loc
Run Code Online (Sandbox Code Playgroud)
函数调用看起来像这样:
>>> locate(nested,4)
[1,1,0]
Run Code Online (Sandbox Code Playgroud)
递归函数可能不是最佳解决方案,而只是我的尝试。
说我有两个这样的对象:
d={'a':{'z':1,'y':2},'b':{'z':0,'y':4}}
k=('a','y')
Run Code Online (Sandbox Code Playgroud)
我如何使用这两个对象来获取:
>>> d['a']['y']
2
Run Code Online (Sandbox Code Playgroud)
我需要它是动态的,所以这不起作用:
d[k[0]][k[1]]
Run Code Online (Sandbox Code Playgroud)
因为我并不总是确定字典的嵌套深度.k可以有一个或多个元素.
我希望可能有一些使用理解来做到这一点,但是说我的数据看起来像这样:
data = [['a', 'b', 'c'], [1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
我的最终目标是创建一个字典,其中第一个嵌套列表包含键,其余列表包含值:
{'a': [1, 4], 'b': [2, 5], 'c': [3, 6]}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了类似这样的东西让我接近,但是你可以告诉我在字典值中附加列表时遇到问题,这段代码只是覆盖:
d = {data[0][c]: [] + [col] for r, row in enumerate(data) for c, col in enumerate(row)}
>>> d
{'c': [6], 'a': [4], 'b': [5]}
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,如:
df <- tibble::rownames_to_column(USArrests, "State") %>%
tidyr::pivot_longer(cols = -State)
head(df)
# A tibble: 6 x 3
State name value
<chr> <chr> <dbl>
1 Alabama Murder 13.2
2 Alabama Assault 236
3 Alabama UrbanPop 58
4 Alabama Rape 21.2
5 Alaska Murder 10
6 Alaska Assault 263
Run Code Online (Sandbox Code Playgroud)
在一个单独的列表对象中,l我有列,我需要从数据框中删除。元素名称是列名称,值对应于我要删除的行:
l <- list(State = c("Alabama", "Pennsylvania", "Texas"),
name = c("Murder", "Assault"))
Run Code Online (Sandbox Code Playgroud)
硬编码它会这样做:
dplyr::filter(df, !State %in% c("Alabama", "Pennsylvania", "Texas"), !name %in% c("Murder", "Assault"))
State name value
<chr> <chr> <dbl>
1 Alaska UrbanPop …Run Code Online (Sandbox Code Playgroud) 我正在尝试为此序列“11111233344455”编写R代码
我想出了如何使用该c()功能来做到这一点。
rep(1:5,c(5,1,3,4,2))
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚没有它该怎么做。
我试过了
seq(rep(1,5),1:5)
seq(rep(5,5),1:5)
Run Code Online (Sandbox Code Playgroud)
都不起作用
我试图计算一个单词的每个字母的出现次数
word = input("Enter a word")
Alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
for i in range(0,26):
print(word.count(Alphabet[i]))
Run Code Online (Sandbox Code Playgroud)
这当前输出每个字母出现的次数,包括不出现的次数.
如何垂直列出字母及其旁边的频率,例如:
字="你好"
H 1
E 1
L 2
O 1
由于某种原因,格式化字典键的方法仅在指定宽度大于4后才开始缩进.任何想法为什么?
for i in range(10):
print({'{0:>{1}}'.format('test',i):12}, "should be indented", i)
Run Code Online (Sandbox Code Playgroud)
输出:
{'test': 12} should be indented 0
{'test': 12} should be indented 1
{'test': 12} should be indented 2
{'test': 12} should be indented 3
{'test': 12} should be indented 4
{' test': 12} should be indented 5
{' test': 12} should be indented 6
{' test': 12} should be indented 7
{' test': 12} should be indented 8
{' test': 12} should be indented 9
Run Code Online (Sandbox Code Playgroud)
此外,当我尝试将带有缩进键的字典输出到文本文档时,缩进不一致.例如,当我指定10个字符的常量缩进宽度时,缩进在输出中不一致.