Это зависит от того, хотите ли вы узнать, существует ли он в одном из каталогов в переменной $PATH
или знаете ли вы его абсолютное местоположение. Если вы хотите узнать, находится ли она в переменной $PATH
, используйте
if which programname >/dev/null; then
echo exists
else
echo does not exist
fi
, в противном случае используйте
if [ -x /path/to/programname ]; then
echo exists
else
echo does not exist
fi
Перенаправление на /dev/null/
в первом примере подавляет вывод which
программа.
Извините, но после тщательного расследования я не могу найти способ выполнить требуемую задачу без минимальной пост-обработки (чтобы убрать нули в конце, которые вы не хотите видеть ); что-то вроде:
import re
ut0 = re.compile(r'(\d)0+$')
thelist = [ut0.sub(r'\1', "%12f" % x) for x in a]
print '\n'.join(thelist)
является быстрым и кратким, но нарушает ваше ограничение быть готовым к использованию - вместо этого это модульная комбинация общего форматирования (которая почти делает то, что вы хотите, но оставляет конечный ноль, который вы хотите для скрытия) и RE для удаления нежелательных конечных нулей. На практике я думаю, что он делает именно то, что вам нужно, но ваши условия, как я полагаю, чрезмерно ограничены.
Изменить : исходный вопрос был отредактирован, чтобы указать более значащие цифры, не требует дополнительного начального пробела, кроме того, что требуется для наибольшего числа, и приведите новый пример (где мое предыдущее предложение выше, не соответствует желаемому результату). Работу по удалению начальных пробелов, которые являются общими для группы строк, лучше всего выполнять с помощью textwrap.dedent - но это работает с одной строкой (с символами новой строки), в то время как требуемый вывод представляет собой список строк. Нет проблем, мы просто соединим строки, разделим их и снова разделим:
import re
import textwrap
a = [ 5.50056103e+02, 6.77383566e+03, 6.01001513e+05,
3.55425142e+08, 7.07254875e+05, 8.83174744e+02,
8.22320510e+01, 4.25076609e+08, 6.28662635e+07,
1.56503068e+02]
thelist = textwrap.dedent(
'\n'.join(ut0.sub(r'\1', "%20f" % x) for x in a)).splitlines()
print '\n'.join(thelist)
emits:
550.056103
6773.83566
601001.513
355425142.0
707254.875
883.174744
82.232051
425076609.0
62866263.5
156.503068
Форматирование строк в Pythons может выводить только необходимые десятичные знаки (с% g) или использовать фиксированный набор десятичных знаков (с% f). Однако вы хотите распечатать только необходимые десятичные дроби, за исключением случаев, когда число является целым числом, тогда вам нужна одна десятичная дробь, и это делает его сложным.
Это означает, что в итоге вы получите что-то вроде:
def printarr(arr):
for x in array:
if math.floor(x) == x:
res = '%.1f' % x
else:
res = '%.10g' % x
print "%*s" % (15-res.find('.')+len(res), res)
Это сначала создаст строку либо с 1 десятичным знаком, если значение является целым числом, либо он будет печатать с автоматическими десятичными знаками (но только до 10 чисел), если это не дробное число. Наконец, он распечатает его, настроив так, чтобы десятичная точка была выровнена.
Возможно, однако, numpy действительно делает то, что вы хотите, потому что вы обычно хотите, чтобы он был в экспоненциальном режиме, если он слишком длинный.