小编LMc*_*LMc的帖子

为什么你可以循环遍历for循环中的隐式元组,而不是Python中的理解?

有没有理由为什么在循环中循环隐式元组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 loops for-loop list-comprehension python-3.x

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

如何在python-docx中将表行保持在一起?

作为一个例子,我有一个通用脚本,使用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标签或者阻止它正常工作的东西吗?

python xml pagination python-docx

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

在闪亮的应用程序中动态创建可编辑的DT

我想创建一个具有以下流程的应用程序:

  1. 用户选择一些数据组
  2. 这些组成为动态选项卡,每个选项卡都包含可使用相应组进行编辑的子集 DT
  3. 每个选项卡都包含一个额外的反应DT,它对 #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)

r shiny dt reactive

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

在Python中,如何返回任意嵌套元素的索引列表?

说我有一个清单:

>>> 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)

递归函数可能不是最佳解决方案,而只是我的尝试。

python recursion functional-programming

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

当密钥存储在另一个对象中时,如何访问字典值?

说我有两个这样的对象:

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可以有一个或多个元素.

python

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

如何从Python中的嵌套列表创建字典?

我希望可能有一些使用理解来做到这一点,但是说我的数据看起来像这样:

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)

python python-3.x dictionary-comprehension

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

当列名称-值对存储在列表中时过滤数据框?

我有一个数据框,如:

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)

r list filter nse tidyverse

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

使用rep()函数而不是c()函数编写R代码来获取序列1 1 1 1 1 2 3 3 3 4 4 4 4 5 5

我正在尝试为此序列“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)

都不起作用

r

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

计算字符串中的字母频率(Python)

我试图计算一个单词的每个字母的出现次数

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

python frequency-analysis

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

为什么没有方法格式化Python字典键缩进?

由于某种原因,格式化字典键的方法仅在指定宽度大于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个字符的常量缩进宽度时,缩进在输出中不一致.

python

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