标签: list-processing

从Bash中的$ PATH变量中删除路径的最优雅方法是什么?

或者更一般地说,如何从Bash环境变量中以冒号分隔的列表中删除项?

我想我多年前已经看到了一种简单的方法,使用更高级的Bash变量扩展形式,但如果是这样的话,我已经忘记了它.对谷歌的快速搜索出乎意料地少了几个相关结果,没有一个我称之为"简单"或"优雅".例如,分别使用sed和awk的两种方法:

PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)
Run Code Online (Sandbox Code Playgroud)

什么都不直接存在?有什么类似于Bash中的split()函数吗?

更新:
看起来我需要为我的故意模糊的问题道歉; 我对解决特定用例的兴趣不如激发良好的讨论.幸运的是,我明白了!

这里有一些非常聪明的技巧.最后,我在工具箱中添加了以下三个功能.魔法发生在path_remove中,这主要基于Martin York巧妙使用awk的RS变量.

path_append ()  { path_remove $1; export PATH="$PATH:$1"; }
path_prepend () { path_remove $1; export PATH="$1:$PATH"; }
path_remove ()  { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
Run Code Online (Sandbox Code Playgroud)

唯一真正的缺点是使用sed去除尾部结肠.考虑到马丁的其他解决方案是多么简单,但我非常愿意接受它!


相关问题: 如何在shell脚本中操作$ PATH元素?

bash shell path variable-expansion list-processing

106
推荐指数
10
解决办法
6万
查看次数

python中的字典列表为HTML表格格式

我有以下格式的字典列表

[{'duration': 0.7, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Development'},
{'duration': 0.9, 'project_id': 4, 'resource': u'Ned Stark', 'activity': u'Development'},
{'duration': 2.88, 'project_id': 7, 'resource': u'Robb Stark', 'activity': u'Development'},
{'duration': 0.22, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 0.3, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 2.15, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Practise'},
{'duration': 3.35, 'project_id': 4, 'resource': u'Sansa Stark', 'activity': u'Development'},
{'duration': 2.17, 'project_id': 9, 'resource': u'Rickon Stark', 'activity': u'Development'},
{'duration': 1.03, 'project_id': 4, 'resource': u'Benjan Stark', …
Run Code Online (Sandbox Code Playgroud)

python openerp python-2.7 pandas list-processing

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

如何在Racket中手动压平列表(Scheme)

如何在不使用内置的扁平功能进行球拍的情况下展平列表?

我知道flatten的默认实现是

(define (flatten lst)
  (cond 
    ((null? list)
      empty)
    ((list? (car lst))
      (append (flatten (car lst)) (flatten (cdr lst))))
    (else
      (cons (car lst) (flatten (cdr lst))))))
Run Code Online (Sandbox Code Playgroud)

但我不完全确定如何不使用flatten功能,因为我不知道它是如何在幕后工作.除了这段代码的实现之外,我找不到对此的良好解释.请有人解释一下

这是我非常糟糕的尝试,我几乎无能为力,因为这甚至不是很接近,也不会运行....

(define acc null)
(define (my-flatten lst)
  (cond
    [(null? lst) null]
    [(list? (car lst)) (help-flatten (car lst)) (append (cdr lst) acc)]
    [else (append (car lst) acc) (my-flatten (cdr lst))]))

(define (help-flatten subLst)
  (if (null? subLst)
      (set! acc null)
      (append (car subLst) acc))
  (help-flatten (cdr subLst)))
Run Code Online (Sandbox Code Playgroud)

scheme flatten racket list-processing

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